gpt4 book ai didi

ios - Swift:跳转到 CollectionView 中的下一个文本字段

转载 作者:行者123 更新时间:2023-12-01 18:41:14 25 4
gpt4 key购买 nike

我试图通过点击输入按钮从单元格中的一个文本字段跳转到 CollectionView 的下一个单元格中的文本字段,但我无法让它工作。

在创建单元格时,我已经为所有文本字段分配了一个单独的标签,方法是为每个文本字段提供相应的 indexPath 作为标签:

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell

// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.myLabel.text = self.items[indexPath.item]
cell.myTextField.tag = indexPath.row
cell.backgroundColor = UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.0) // make cell more visible in our example project

// Change shape of cells
cell.layer.cornerRadius = 8

return cell
}

现在我的意图是,使用下面的代码进入下一个文本字段,如果有的话:
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// Try to find next responder
print(textField.tag) // Test if chosen textfield has individual tag
if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
// Do not add a line break
return false
}

}

但是每当我点击回车按钮时,nextField 总是为零,否则将执行 else 情况并且键盘消失。
我的猜测是,nextField 在错误的位置查找其他 TextField,这就是它找不到它们的原因(每个单元格有一个 Textfield,但 ViewController 中没有直接的 TextField)。

由于我对编程很陌生,所以我不知道如何解决这个问题。

最佳答案

if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField

在此代码中 textField.superview 是当前单元格。没有 View 的标签等于 textField.tag + 1。您应该先获取下一个单元格,然后获取 textFiled。
像这样更改您的代码
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// Try to find next responder
print(textField.tag)
// Test if chosen textfield has individual tag
let nextCell = self.collectionView?.cellForItem(at: IndexPath.init(row: textField.tag + 1, section: 0))
if let nextField = nextCell.viewWithTag(textField.tag + 1) as? UITextField {
nextField.becomeFirstResponder()
} else {
// Not found, so remove keyboard.
textField.resignFirstResponder()
}
// Do not add a line break
return false
}

关于ios - Swift:跳转到 CollectionView 中的下一个文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com