UITextField inputView 在 Swift 中不起作用
Posted
技术标签:
【中文标题】UITextField inputView 在 Swift 中不起作用【英文标题】:UITextField inputView is not working in Swift 【发布时间】:2014-08-13 08:30:08 【问题描述】:我正在尝试将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;
提前致谢。
【问题讨论】:
检查pickerView
框架是否设置正确。如果是零宽高可能会导致隐形。
@Keenle pickerView 已在 Xib 中连接。我检查了pickerView的框架,它不是零。
【参考方案1】:
当我看到这样的错误时,我真的很惊讶!您的代码看起来 100% 有效并且必须有效。我什至创建了一个小项目来重现这个问题。并成功繁殖。
所以我的步骤是:
在 Xib 中使用 UITextView
创建简单项目,并在 application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!)
中实例化。运行并查看默认键盘是否显示。
向 Xib 添加另外两个视图并将它们连接到 MyViewController。并像你一样在viewDidLoad
中设置inputView
和accessoryInputView
。
运行并查看问题。
答案从这里开始:
然后我刚刚重置了模拟器,清理了构建文件夹并再次运行代码。它按预期工作!
在我看来,它就像 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】:-
确保在视图中覆盖
canBecomeFirstResponder
控制器并返回真。 (默认为假)
覆盖视图控制器中的inputAccessoryView
属性
并返回您选择的视图。 注意:确保您
在返回之前将其从其超级视图中删除。 (但它可以是一个
在 IB 中创建并通过插座链接的视图)
【讨论】:
以上是关于UITextField inputView 在 Swift 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UITextField InputView 需要一个完成按钮
UITableView 中的 UITextField 与 DatePicker 的 InputView
在 UITableView 重新加载时以编程方式打开/关闭 UITextField 的 inputView
UIPickerView 作为多个 UITextField 的 inputView
UITableView 作为 UITextField didSelectRowAtIndexPath 的 inputView 随机未触发