假设您有2个文本字段实例变量连接到您在Interface Builder中创建的文本字段。让我们叫他们myReadOnlyTextField
和myEditableTextField
。确保将Interface Builder中每个文本字段的delegate
属性连接到视图控制器(“文件所有者”)[1]。现在,在视图控制器@implementation
(.m文件)中,使用方法textFieldShouldBeginEditing:
,并放入一些逻辑来确定要允许编辑哪个文本字段,哪些不允许编辑;是这样的:
- (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;
}
从UITextFieldDelegate
Documentation:
textFieldShouldBeginEditing:
问代表是否应编辑在指定文本字段开始 。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
参数
textField
- 为其编辑即将 开始的文本字段。
返回值
YES
如果一个编辑会话,应启动; 否则,NO
禁止编辑。
讨论
当用户执行通常会 启动编辑会话的行为,该文本字段调用此方法首先 看看编辑实际上应该继续进行。在大多数情况下, 只会从此方法返回YES以允许编辑继续。
委托实现此方法是可选的。如果不存在 ,则继续进行编辑,就好像此方法返回YES一样。
UITextField
Documentation是一个很好的阅读也。
[1]你可以做到这一点编程为好。这里是一个例子:
- (void)viewDidLoad {
[super viewDidLoad];
// .....
myReadOnlyTextField.delegate = self;
myEditableTextField.delegate = self;
}
为所有'不可编辑的'textFields分配一个通用标记值并在'textFieldDidBeginEditing'方法上检查它并轻松返回BOOL是很容易的。 – Gokul