2

我正在尝试设置inputView&inputAccessoryViewUITextField. 但是,当我开始点击 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;
}

提前致谢。

4

5 回答 5

4

看到这样的bug我真的很惊讶!您的代码看起来 100% 有效并且必须有效。我什至创建了一个小项目来重现这个问题。并成功繁殖。

所以我的步骤是:

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

  2. 向 Xib 添加另外两个视图并将它们连接到 MyViewController。像你一样设置inputViewaccessoryInputView进入。viewDidLoad

  3. 运行并查看问题。

答案从这里开始:

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

它在我看来就像 xCode 或模拟器(或可能两者兼有)的错误,但我不能说谁有罪以及为什么。

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

在此处输入图像描述

于 2014-08-13T16:01:24.053 回答
3

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

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

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

于 2014-11-13T20:45:28.430 回答
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!")
}
于 2014-08-13T10:23:52.880 回答
1

这对我有用,因为设置 inputView 将视图添加到情节提要,但没有任何外观设置起作用并且 viewDidLoad() 没有被调用。

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

于 2016-02-21T21:44:18.253 回答
0
  1. 确保在视图控制器中覆盖canBecomeFirstResponder并返回 true。(默认为假)
  2. 覆盖inputAccessoryView视图控制器中的属性并返回您选择的视图。注意:确保在返回之前将其从超级视图中删除。(但它可以是在 IB 中创建并通过插座链接的视图)
于 2016-01-25T17:05:05.217 回答