如何使UITextField可选但不可编辑?

时间:2014-02-19 22:11:59

标签: ios objective-c uitextfield

我希望用户可以复制和粘贴文本,但不能编辑它们。我使用委托UITextField方法来实现这个:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range       replacementString:(NSString *)string{
    return NO;
}

这样虽然文本是可选择的而且不可编辑,但是当你选择文本时,键盘总是显示出来,这有点烦人,因为你无法编辑文本。那么无论如何在不显示键盘的情况下使文本可选而不可编辑?

5 个答案:

答案 0 :(得分:11)

您需要的是允许控件接收所有用户交互事件。所以,不要return NO来自textFieldShouldBeginEditing。相反,请执行以下操作:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    return textField != _yourReadOnlyTextField;
}

这将允许用户选择文字,并从弹出菜单中选择CutCopyDefine等选项。

<强>更新

另外,为了完整起见,您可能希望防止键盘在现有文本字段上完全显示。因此,根据对此问题的接受答案: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)

您可以直接通过故事板进行操作 然后在属性检查器中选择var match = community.TeamLeagues .Where(x => x.Seasons .Where(y => y.Divisions .Where(z => z.Matches .Where(a => a.Id == "1234").FirstOrDefault()))); 你有一些行为障碍:

enter image description here