带PickerView的UITextField:不允许编辑

时间:2015-11-28 22:09:42

标签: ios swift uitextfield uipickerview

我有一个与PickerView关联的UITextField(PickerView是textField的inputView) Il工作正常,但我想在我的TextField中禁止编辑(无法选择,复制文本,查看插入点,......)。 我在这里红色实现textField shouldChangeCharactersInRange,用于uITextField的委托,但它不起作用... 永远不会调用该方法,但是委托正确完成,因为如果我实现textFieldShouldBeginEditing,则会调用它。 有什么(简单的)方法可以做我想要的吗?

2 个答案:

答案 0 :(得分:0)

提供您的for sub in reversed(list(t.subtrees())): if sub.height() == 2 and sub[0].startswith("*"): # abbreviated test parent = sub.parent() while parent and len(parent) == 1: sub = parent parent = sub.parent() print(sub, "will be deleted") del t[sub.treeposition()] ID,然后实施UITextField委托。在这些委托中,检查textFieldShouldBeginEditing ID,如果它与您想要的textField匹配,请运行函数调用您的选择器视图并在textField委托中返回false。

答案 1 :(得分:0)

以下内容不允许粘贴和剪切文本,除非结果完全是选择器的结果。例如,我假设这是UIDatePicker

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
    return string == formatter.stringFromDate(datePickerView.date)
}

格式化程序就像

    let formatter = NSDateFormatter()
    formatter.locale = NSLocale.currentLocale()
    formatter.dateFormat = "dd/MM/yyyy"

此外,如果您以编程方式将文本字段设置为字符串日期,则可能需要将textField的inputView选取器与

同步
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
{
    if let text = textField.text {
        if let date = formatter.dateFromString(text) {
            datePickerView.setDate(date, animated: true)
        }
    }
    return true
}