【发布时间】:2013-11-01 10:33:43
【问题描述】:
我有一个只读文本字段。我希望当值更改为此字段时,也可以设置另一个文本字段。
我应该使用哪个事件。尝试使用 editingChanged ,但没有被调用。 请帮忙。
【问题讨论】:
-
如何更改只读文本?如果它正在改变,那么你怎么能把它称为只读文本呢?
标签: ios iphone objective-c uitextfield
我有一个只读文本字段。我希望当值更改为此字段时,也可以设置另一个文本字段。
我应该使用哪个事件。尝试使用 editingChanged ,但没有被调用。 请帮忙。
【问题讨论】:
标签: ios iphone objective-c uitextfield
如果文本字段是只读的,那么您必须以编程方式设置文本,对吗?那样的话,在设置文本的时候,同时设置其他文本域的文本。
如果我误解了您的问题,并且用户编辑了文本字段,您可以通过这种方式监听更改:
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventValueChanged];
并通过以下方式处理回调:
- (void)textFieldDidChange:(UITextField *)textField
{
// Handle change
}
【讨论】:
来自 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
【讨论】: