我有一个带有文本框和按钮的UIBarButtonItem的UIToolbar。当用户点击工具栏内的TextField时,我正在尝试将这个工具栏用作键盘的inputAccessory。
我发现了这个问题,它试图解决相同的问题。不幸的是,解决方案并不有效。
我尝试的是:
class ChatViewController: UIViewController, CLLocationManagerDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var chatTableView: UITableView!
@IBOutlet weak var chatToolbar: UIToolbar!
@IBOutlet weak var textFieldBarButtonItem: UIBarButtonItem!
override func viewDidAppear(animated: Bool) {
super.viewDidLoad()
self.chatTableView.delegate = self
self.chatTableView.dataSource = self
self.chatToolbar.removeFromSuperview()
}
override var inputAccessoryView: UIView{
get{
return self.chatToolbar
}
}
override func canBecomeFirstResponder() -> Bool {
return true
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = UITableViewCell()
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 0
}
}
我得到的是:
*** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason:
'child view controller:<UICompatibilityInputViewController: 0x13ff34e00> should have parent view controller:
<App.ChatViewController: 0x13ff21cc0> but requested parent is:<UIInputWindowController: 0x1400b4600>'
任何想法?
inputAccessoryView:
在viewDidAppear
之前被调用。附件视图不应该属于任何视图层次结构。顺便说一句:接受的答案也可以。 - OmerviewDidAppear
之后强制调用inputAccessoryView
? - adolfosrsinputAccessoryView
是UIResponder的属性(因此也是UIViewController的属性)。该类的基本实现使用此属性以提供必要的自定义行为。请查看我分享的项目。 - Omer