【问题标题】:set UITextField as non editable - Objective C将 UITextField 设置为不可编辑 - 目标 C
【发布时间】:2011-03-17 13:10:33
【问题描述】:
    [Number.editable = NO];
    [Number resignFirstResponder];
    [Password.editable = NO];
    [Password resignFirstResponder];

我收到了错误

在非结构或联合的情况下请求成员“可编辑”

:S

谢谢

【问题讨论】:

    标签: iphone objective-c uitextfield


    【解决方案1】:

    首先,如果您不发送消息,则不需要[...]

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

    但这不是错误的原因。 The .editable property 只为 UITextView 定义,而不是 UITextField。您应该为 UITextField 设置 the .enabled property(注意 UITextField 是 UIControl)。

    Number.enabled = NO;
    ...
    

    【讨论】:

    • 我意识到这一点并在发布后更改了但仍然无法正常工作:S
    【解决方案2】:

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

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

    这样就行了,我更喜欢这种方法而不是设置 textField.enabled = YES,因为在应用程序的生命周期中编辑能力可能会发生变化。

    【讨论】:

    • BlocksKit pod 使这变得更加容易:list.bk_shouldBeginEditingBlock = ^BOOL (UITextField *field) { return NO; };
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      textField.userInteractionEnabled = NO;
      

      希望这会有所帮助..

      【讨论】:

      • 请注意,这意味着用户也无法长按复制
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2011-02-23
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多