繁体   English   中英

UITextField inputView在Swift中不起作用

[英]UITextField inputView is not working in Swift

我正在尝试为UITextField设置inputViewinputAccessoryView 但是,当我开始点击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;
}

提前致谢。

看到这样的错误,我真的很惊讶! 您的代码看起来100%有效,并且可以正常工作。 我甚至创建了一个小项目来重现问题。 并成功繁殖。

所以我的步骤是:

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

  2. 向Xib添加两个视图并将它们连接到MyViewController。 并在viewDidLoad设置inputViewaccessoryInputView

  3. 运行并查看问题。

答案从这里开始:

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

对于我来说,它看起来像是xCode或仿真器的错误(或可能是两者兼有),但我不能说是谁内an,为什么。

截图 (带按钮的视图是我的键盘:)

在此输入图像描述

事实证明,答案要简单得多。 如果您使用硬件键盘而不是软键盘,则模拟器会打开其“连接硬件键盘”设置,并且您将不再获得软键盘。 建议重置模拟器的原因是因为它也会重置此设置。 如果您不想进行完全重置,只需通过以下步骤关闭硬件键盘:

硬件->键盘->并确保未选中“连接硬件键盘”

如何禁用模拟器的硬件键盘

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

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!")
}
  1. 确保在视图控制器中覆盖canBecomeFirstResponder并返回true。 (默认为false)
  2. 覆盖视图控制器中的inputAccessoryView属性并返回您选择的视图。 注意:返回之前,请确保将其从其超级视图中删除。 (但它可以是在IB中创建并通过插座链接的视图)

这对我有用,因为设置inputView将视图添加到情节提要中,但是外观设置均不起作用,并且未调用viewDidLoad()。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM