【发布时间】:2010-10-10 15:04:06
【问题描述】:
有没有一种简单的方法可以在代码中禁用UITextField?
我的应用有 12 个UITextField,默认情况下全部打开,但是当在我的 Segment Control 中检测到更改时,我想根据用户选择的 Segment 禁用一些 UITextField。
只需要知道如何禁用它或使其不可编辑?
谢谢
【问题讨论】:
标签: iphone ios uitextfield
有没有一种简单的方法可以在代码中禁用UITextField?
我的应用有 12 个UITextField,默认情况下全部打开,但是当在我的 Segment Control 中检测到更改时,我想根据用户选择的 Segment 禁用一些 UITextField。
只需要知道如何禁用它或使其不可编辑?
谢谢
【问题讨论】:
标签: iphone ios uitextfield
在 Objective-C 中:
textField.enabled = NO;
在 Swift 中:
textField.isEnabled = false
【讨论】:
enabled继承了UIControl的属性。如果否,则忽略触摸事件。这是一种很好的解决方法。
如果您还想指示文本字段被禁用,您应该添加更多代码:
如果使用 UITextBorderStyleRoundedRect,则只能将文本变灰:
textField.enabled = NO;
textField.textColor = [UIColor lightGrayColor];
如果使用任何其他样式,您也可以将背景变灰:
textField.enabled = NO;
textField.backgroundColor = [UIColor lightGrayColor];
【讨论】:
这将是最简单的,当您也有多个文本字段时:
在 viewDidLoad 中:(仅为不可编辑的文本字段设置委托。
self.textfield.delegate=self;
并插入这个委托函数:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return NO;
}
就是这样!
【讨论】:
textField.enabled = NO简单多了?我没有 -1 这个,因为它是一个合法的替代解决方案,在一些边缘情况下可能更方便(例如,如果你有一些对象是不同文本字段的负载的代表,并且哪些对象被禁用是经常更改),但对于大多数情况,它绝对不会比公认的答案更简单。
在 UIView 上创建类别。
在该类别中添加以下方法。
-(void)disable {
self.alpha = 0.5;
self.userInteractionEnabled = FALSE;
}
-(void)enable {
self.alpha = 1.0;
self.userInteractionEnabled = TRUE;
}
然后打电话
yourTextField.disable();
实际上,您可以在任何您想要的视图上使用它。
【讨论】:
你应该符合UITextFieldDelegate并在这个方法中返回false。这样文本字段仍然可以选择,但不可编辑和剪切
代码在 Swift 4 中
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return false
}
【讨论】: