【问题标题】:UITextField inputView is not working in SwiftUITextField inputView 在 Swift 中不起作用
【发布时间】:2014-08-13 08:30:08
【问题描述】:

我正在尝试将inputViewinputAccessoryView 设置为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;
}

提前致谢。

【问题讨论】:

  • 检查pickerView 框架是否设置正确。如果是零宽高可能会导致隐形。
  • @Keenle pickerView 已在 Xib 中连接。我检查了pickerView的框架,它不是零。

标签: ios swift uitextfield inputview


【解决方案1】:

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

所以我的步骤是:

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

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

  3. 运行并查看问题。

答案从这里开始:

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

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

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

【讨论】:

  • 可以确认。转载。我以为我快疯了。代码完全正确,突然 UIPickerView 只显示了 inputAccessoryView。我很高兴我发现这个来验证我的理智。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    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!")
    }
    

    【讨论】:

    • 为什么要以编程方式创建视图?我已经在 XIB 中创建了它。
    【解决方案4】:

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

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

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-24
        • 2014-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多