【问题标题】:which event to use for readonly textfield when text is changed更改文本时将哪个事件用于只读文本字段
【发布时间】:2013-11-01 10:33:43
【问题描述】:

我有一个只读文本字段。我希望当值更改为此字段时,也可以设置另一个文本字段。

我应该使用哪个事件。尝试使用 editingChanged ,但没有被调用。 请帮忙。

【问题讨论】:

  • 如何更改只读文本?如果它正在改变,那么你怎么能把它称为只读文本呢?

标签: ios iphone objective-c uitextfield


【解决方案1】:

如果文本字段是只读的,那么您必须以编程方式设置文本,对吗?那样的话,在设置​​文本的时候,同时设置其他文本域的文本。

如果我误解了您的问题,并且用户编辑了文本字段,您可以通过这种方式监听更改:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventValueChanged];

并通过以下方式处理回调:

- (void)textFieldDidChange:(UITextField *)textField
{
    // Handle change
}

【讨论】:

    【解决方案2】:

    来自 Apple 文档

    textFieldShouldBeginEditing:询问代理是否应该开始编辑 在指定的文本字段中。

    • (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

    参数 textField - 即将编辑的文本字段 开始。

    如果应该启动编辑会话,则返回值 YES;除此以外, NO 禁止编辑。

    讨论当用户执行通常会执行的操作时 启动编辑会话,文本字段首先调用此方法 看看编辑是否应该实际进行。在大多数情况下,您 将简单地从此方法返回 YES 以允许继续进行编辑。

    委托执行此方法是可选的。如果是 不存在,编辑继续进行,就好像这个方法返回了 YES。

    所以使用类似的东西:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
        BOOL editable;
        if (textField == myReadOnlyTextField) {
            editable = NO;
        } else if (textField == myEditableTextField) {
            editable = YES;
        } else {
            // editable = YES/NO/Other Logic
        }
        return editable;
    }
    

    此外,为了调用委托方法,您的接口应符合 UITextfieldProtocol:将其添加到您的 .h 文件 <UITextFieldDelegate>,使其看起来像这样:

    @interface ViewController : UIViewController <UITextFieldDelegate>
    

    【讨论】:

      【解决方案3】:

      如果您在 ios 中实现,请实现此委托方法。

      - (BOOL)textField:(UITextField *)textField 
      shouldChangeCharactersInRange{}
      

      如果您在 macos 中实现,请使用以下委托方法:-

            -(void)controlTextDidChange
      

      【讨论】:

        猜你喜欢
        • 2020-05-11
        • 2011-03-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多