代码说明
我对我的应用程序做了一个小改动(Swift 2.1,xCode 7.2,部署目标8),添加了一个包含两个搜索选项的表。行为可以映射为:
didSelectRowAtIndexPath
上,更改 ViewController 的selectedSearchOption
属性,然后根据所选元素更改keyboardType
。然后,调用reloadInputViews
(vc)和reloadData
(表格)。代码
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.selectedSearchOption = self.searchOptions[indexPath.item]
switch selectedSearchOption {
case SearchOption.ByTeam:
searchField.keyboardType = UIKeyboardType.NumbersAndPunctuation
default:
searchField.keyboardType = UIKeyboardType.Default
}
searchField.reloadInputViews()
searchOptionsTableView.reloadData()
}
cellForRowAtIndexPath
方法(之后调用,因为我调用reloadData
)上,我检查selectedSearchOption
属性以自定义所选元素的视图。代码的
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(SearchOptionCell.identifier) as! SearchOptionCell
let searchOption = self.searchOptions[indexPath.item]
cell.name.text = searchOption.rawValue
if self.selectedSearchOption == searchOption {
cell.imageView?.image = UIImage(named: "ic_done_16")
} else {
cell.imageView?.image = nil
}
return cell
}
问题:
代码在iPad 2(8.3)和iPhone 6(8.4.1)上工作正常,但在iPhone 4S上(它是9.something,我更新到9.3.1),发生了两件奇怪的事情:
reloadInputViews
未更改用户的键盘类型(我已尝试拨打resignFirstResponder
然后becomeFirstResponder
)。
调用cellForRowAtIndexPath
时,selectedSearchOption
属性使用旧值,就像从未更改过一样。虽然很疯狂,如果我调试didSelectRowAtIndexPath
,VC上的值是正确的。
我做错了什么想法?
答案 0 :(得分:0)
我发现了问题。
我有一个UIKeyboardWillShowNotification
事件的听众。
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "showKeyboard",
name:
UIKeyboardWillShowNotification,
object: nil
)
在showKeyboard方法中,我重置了selectedSearchOption
值。显然,在 iOS 9 上,reloadInputViews
方法正在调用UIKeyboardWillShowNotification
事件。
要解决此问题,我现在使用我在UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
事件中更新的标记检查键盘是否已打开。很高兴UIKeyboardWillHideNotification
方法不会调用reloadInputViews
。然后,只要键盘打开,我就会重置selectedSearchOption
属性。
答案 1 :(得分:0)
你想调用 reloadInputView ,首先我想知道键盘在你调用reloadInputView的方法之前是否成为第一响应者。这非常重要......希望它对你的问题有用..