UITextField inputView在Swift中不起作用

时间:2014-08-13 08:30:08

标签: ios swift uitextfield inputview

我想设置inputView& inputAccessoryView UITextField。但是,当我开始点击textField时,只有inputAccessoryView来自底部。

以下是我的代码:

@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var toolBar: UIToolbar!

override func viewDidLoad() {
    super.viewDidLoad()
    self.textField.inputView = self.pickerView;
    self.textField.inputAccessoryView = self.toolBar;
}

提前致谢。

5 个答案:

答案 0 :(得分:4)

当看到这样的虫子时,我真的很惊讶!您的代码看起来100%有效,必须工作。我甚至创建了一个小项目来重现问题。并成功复制。

所以我的步骤是:

  1. 在Xib中使用UITextView创建简单项目,并在application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!)中进行实例化。运行并查看显示的默认键盘。

  2. 向Xib添加另外两个视图并将它们连接到MyViewController。并在inputView中设置accessoryInputViewviewDidLoad

  3. 运行并查看问题。

  4. 从这里开始回答:

    然后我只是重置模拟器,清理了build文件夹并再次运行代码。它按预期工作了!

    它看起来像是一个xCode或模拟器的错误(或者可能是两者),但我不能说谁是有罪的原因。

    屏幕截图(使用按钮查看是我的键盘:)

    enter image description here

答案 1 :(得分:2)

所以答案要简单得多,事实证明。如果您使用硬件键盘而不是软键盘,模拟器将打开其连接硬件键盘"设置,你将不再获得软键盘。建议重置模拟器的原因是因为它也会重置此设置。如果您不想完全重置,只需转到:

关闭硬件键盘

硬件 - >键盘 - >并确保"连接硬件键盘"是UNchecked

How to disable hardware keyboard for simulator

答案 2 :(得分:1)

您可以通过编程方式创建视图。

weak var pickerView: UIPickerView!
weak var toolBar: UIToolbar!
@IBOutlet weak var textField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
    var picker = UIPickerView()
    picker.delegate = self
    picker.dataSource = self
    self.pickerView = picker
    self.textField.inputView = pickerView

    var toolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 44))

    var item = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done,
        target: self, action: "doneAction")

    toolbar.setItems([item], animated: true)
    self.textField.inputAccessoryView = toolbar
    self.toolBar = toolbar
}

func doneAction() {
    self.textField.resignFirstResponder()
    println("done!")
}

答案 3 :(得分:0)

  1. 确保在视图中覆盖canBecomeFirstResponder 控制器并返回true。 (默认为false)
  2. 覆盖视图控制器中的inputAccessoryView属性 并返回您选择的视图。 注意:确保你 在退回之前将其从超级视图中删除。 (但它可以是一个 在IB中创建并通过插座链接的视图)

答案 4 :(得分:0)

这对我有用,因为设置inputView将视图添加到故事板但没有任何外观设置工作且viewDidLoad()没有被调用。

self.inputText?.inputViewController?.view.addSubview(self.basicKeyboard) self.inputText!.inputView = self.basicKeyboard self.inputText!.inputAccessoryView = nil