将UITextField设置为不可编辑 - Objective C

12
    [Number.editable = NO];
    [Number resignFirstResponder];
    [Password.editable = NO];
    [Password resignFirstResponder];

我遇到了这个错误:

请求访问非结构体或联合体中的“editable”成员。

:S

谢谢

4个回答

28
首先,如果你不发送消息,则不需要使用[...]
Number.editable = NO;
[Number resignFirstResponder];
Password.editable = NO;
[Password resignFirstResponder];

但这不是错误的原因。.editable属性只对UITextView定义,而不对UITextField定义。对于UITextField,您应该设置.enabled属性(请注意,UITextField是UIControl)。

Number.enabled = NO;
...

我意识到这一点并在发布后进行了更改,但仍然无法正常工作:S。 - user393273

18

此外,您可以使用委托方法。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
  return NO;
}

这样做就行了,我更喜欢这种方法,因为在应用程序的生命周期中可能会改变编辑能力,所以我不想使用textField.enabled = YES的方式。


BlocksKit库使这更加容易:list.bk_shouldBeginEditingBlock = ^BOOL (UITextField *field) { return NO; }; - Ben Clayton

6
textField.userInteractionEnabled = NO;

希望这能帮到您。

请注意,这意味着用户将无法长按复制。 - mylogon

0

从shouldChangeCharactersInRange返回NO会是更好的选择,因为如果文本长度超过文本字段宽度,则上述解决方案将会出现问题,因为用户将无法看到所有文本(即文本隐藏在文本字段宽度之外)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接