我有一个只读文本字段。我希望当值更改为此字段时,也可以设置另一个文本字段。
我应该使用哪个事件。尝试使用 editingChanged ,但没有被调用。请帮忙。
我有一个只读文本字段。我希望当值更改为此字段时,也可以设置另一个文本字段。
我应该使用哪个事件。尝试使用 editingChanged ,但没有被调用。请帮忙。
来自 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>
如果您在 ios 中实现,请实现此委托方法。
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange{}
如果您在 macOS 中实现,请使用以下委托方法:-
-(void)controlTextDidChange
如果文本字段是只读的,那么您必须以编程方式设置文本,对吗?在这种情况下,当您设置文本时,同时设置其他文本字段的文本。
如果我误解了您的问题,并且用户编辑了文本字段,您可以通过以下方式监听更改:
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventValueChanged];
并通过以下方式处理回调:
- (void)textFieldDidChange:(UITextField *)textField
{
// Handle change
}