Ios 想要在点击时返回swift中第一响应者的索引,但顺序很奇怪

Ios 想要在点击时返回swift中第一响应者的索引,但顺序很奇怪,ios,swift,uitextfield,Ios,Swift,Uitextfield,我在故事板中有100个UITextField框,它们存储在一个名为boxArray的数组中 我还有另一个名为importantIndex的数组,它存储boxArray的重要索引 (请在下一段中耐心听我说) 当用户点击boxArray中特定的UITextField框时,谁的索引与ImportantIndex数组中的值匹配。然后我想返回importantIndex数组的索引,该值是boxArray第一响应程序的索引 这是在点击某个特定的UITextField时调用的函数: @objc func my

我在故事板中有100个
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个boxArray
UITextField
,然后点击第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()线,键盘就不会隐藏。你是在真实的设备上运行,还是在模拟器中运行?