Ios 想要在点击时返回swift中第一响应者的索引,但顺序很奇怪
我在故事板中有100个Ios 想要在点击时返回swift中第一响应者的索引,但顺序很奇怪,ios,swift,uitextfield,Ios,Swift,Uitextfield,我在故事板中有100个UITextField框,它们存储在一个名为boxArray的数组中 我还有另一个名为importantIndex的数组,它存储boxArray的重要索引 (请在下一段中耐心听我说) 当用户点击boxArray中特定的UITextField框时,谁的索引与ImportantIndex数组中的值匹配。然后我想返回importantIndex数组的索引,该值是boxArray第一响应程序的索引 这是在点击某个特定的UITextField时调用的函数: @objc func my
UITextField
框,它们存储在一个名为boxArray的数组中
我还有另一个名为importantIndex的数组,它存储boxArray的重要索引
(请在下一段中耐心听我说)
当用户点击boxArray中特定的UITextField
框时,谁的索引与ImportantIndex数组中的值匹配。然后我想返回importantIndex数组的索引,该值是boxArray第一响应程序的索引
这是在点击某个特定的UITextField
时调用的函数:
@objc func myNotWorkingFunction(textField: UITextField) {
for i in 0...99 {
if (boxArray[i]?.isFirstResponder)! {
let index = boxArray.index(of: boxArray[i])
print(index)
}
}
}
我遇到了两个问题。第一个是打印函数返回“可选(索引)”。我只想要int值索引,但它像下面的示例一样打印:可选(14)
我的第二个问题是,这似乎打印了第一个响应者的索引,在它被更改为新的之前,它是第一个响应者。假设用户在第11个boxArrayUITextField
,然后点击第55个,打印返回“可选(11)”而不是我想要的“55”
我不能在这里使用
textfielddidediting(:)
,这可能很好。我必须坚持攻丝功能。有什么想法吗?第一个问题是通过拆开包装来解决的
if let index = boxArray.index(of: boxArray[i]) {
print(index)
}
第二个问题“可能”是,当调用objc函数时,您需要调用它
宣布:
var currentTextField:UITextField?
在你的职能中:
currentTextField?.resignFirstResponder()
currentTextField = textField
textField.becomesFirstResponder()
只需编辑这个print(index)
到print(index??0)
或使用如果让或guard
我想你需要直接返回I而不是indexoft这个工作了,但是当我这样做时,我的键盘由于某种原因隐藏了,这是出乎意料的。你正在调用resignFirstResponder()
在textField委托的其他地方
方法?从未在任何地方调用resignFirstResponder(),该函数现在看起来都一样,只是我添加了您的更改和新行textField。由于for循环之前的firstresponder()仍然存在相同的问题,我完全感到困惑。但我确实注意到,如果我按住水龙头,键盘仍然存在。但一旦我放开它,它就消失了。可能是敲击动作在结束时自动完成的吗?隐马尔可夫模型。。。如果我取出becomeFirstResponder()线,键盘就不会隐藏。你是在真实的设备上运行,还是在模拟器中运行?