我有一个ListView,并且已订阅 OnListKeyDown()。如果得到左或右输入,则进行一些处理,以有效地重新创建ListView的ItemsSource。 当我说“正在重新创建”时,我的意思是:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let currentText:String = textField.text else {return true}
if string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) != nil { return false }
let newCount:Int = currentText.count + string.count - range.length
let addingCharacter:Bool = range.length <= 0
if(newCount == 1){
textField.text = addingCharacter ? currentText + "(\(string)" : String(currentText.dropLast(2))
return false
}else if(newCount == 5){
textField.text = addingCharacter ? currentText + ") \(string)" : String(currentText.dropLast(2))
return false
}else if(newCount == 10){
textField.text = addingCharacter ? currentText + "-\(string)" : String(currentText.dropLast(2))
return false
}
if(newCount > 14){
return false
}
return true
}
我注意到,此后,如果我向上或向下按下,将重置焦点元素(而不是当前元素,而是第一元素)。我尝试在输入事件期间记录状态,但是一切看起来都正确。
答案 0 :(得分:0)
战斗几天后,我发现了如何重设键盘焦点。首先,您需要缓存选定的索引,然后在完成更新后,重置选定的项目并集中精力。 这是该代码的摘要:
View.EntriesView.SelectedItem = View.EntriesView.Items[cacheIdx];
View.EntriesView.UpdateLayout();
((ListViewItem)View.EntriesView.ItemContainerGenerator.ContainerFromIndex(cacheIdx)).Focus();
感谢@Alfie的帮助。