更改文本时用于只读文本字段的事件

时间:2013-11-01 10:33:44

标签: ios iphone objective-c uitextfield

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

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

3 个答案:

答案 0 :(得分:0)

如果文本字段是只读的,那么您必须以编程方式设置文本,对吧?在这种情况下,当您设置文本时,请同时设置其他文本字段的文本。

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

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

以下列方式处理回调:

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

答案 1 :(得分:0)

来自Apple文档

  

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

     
      
  • (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
  •   
     

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

     

如果应启动编辑会话,则返回值YES;除此以外,   不允许编辑。

     

讨论当用户执行通常的操作时   启动编辑会话,文本字段首先调用此方法   看看是否应该进行编辑。在大多数情况下,你   只需从此方法返回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>

答案 2 :(得分:0)

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

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

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

      -(void)controlTextDidChange