我希望用户可以复制和粘贴文本,但不能编辑它们。我使用委托UITextField
方法来实现这个:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return NO;
}
这样虽然文本是可选择的而且不可编辑,但是当你选择文本时,键盘总是显示出来,这有点烦人,因为你无法编辑文本。那么无论如何在不显示键盘的情况下使文本可选而不可编辑?
答案 0 :(得分:11)
您需要的是允许控件接收所有用户交互事件。所以,不要return NO
来自textFieldShouldBeginEditing
。相反,请执行以下操作:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
return textField != _yourReadOnlyTextField;
}
这将允许用户选择文字,并从弹出菜单中选择Cut
,Copy
和Define
等选项。
<强>更新强>
另外,为了完整起见,您可能希望防止键盘在现有文本字段上完全显示。因此,根据对此问题的接受答案:uitextfield hide keyboard?,您可能需要添加:
- (void)viewDidLoad
{
// Prevent keyboard from showing up when editing read-only text field
_yourReadOnlyTextField.inputView = [[UIView alloc] initWithFrame:CGRectZero];
}
答案 1 :(得分:2)
Swift用户更新:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return textField != self.yourReadOnlyTextField;
}
并且视图加载
override func viewDidLoad() {
super.viewDidLoad()
self.selfCodeEdit.inputView = UIView.init();
}
答案 2 :(得分:1)
您应该实现另一个UITextField
的委托方法:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return NO;
}
//更新此外,这里有一个类似的问题How to disable UITextField's edit property?。
答案 3 :(得分:0)
如果您有多个textField可以这样做
begin()/end()
答案 4 :(得分:-3)