swift 中使用键盘 IQKeyboardManagerSwift 点击完成按钮时如何获取放置在表视图中的文本字段的索引路径

How to get Indexpath of textfield which placed in tableview when tap on done button using keyboard IQKeyboardManagerSwift in swift

我是 swift 的新手,我正在为文本字段和文本视图使用 IQKeyboardManagerSwift 库。我无法将 Indexpath 从 tableview 发送到选择器函数。我的代码是这样的

TableViewCell

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "TimeSheetTableViewCell", for: indexPath) as? TimeSheetTableViewCell else {
            return UITableViewCell()
        }
        cell.txtTimeSheet.text = arrcheck[indexPath.row]
        cell.txtTimeSheet.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(doneButtonClicked))
        return cell
    }

 @objc func doneButtonClicked(_ sender: Any) {
        print("Done")
        
    }

我想要donebuttonClick 函数中tableview 的Indexpath。可能吗。 提前致谢!

首先在你的应用程序中创建一个这样的变量,你可以在 cellForRowAt 中使用它, 像这样:

var appIndexPathRow = Int()

然后将此代码放入您的 cellForRowAt:

appIndexPathRow  = indexPath.row

如果你的表格视图中只有 1 个部分,这些代码就可以工作,如果你有超过 1 个部分,我应该给你另一个代码! 毕竟你可以在按钮操作中打印你的索引!玩得开心

PS:我只是给了你你在问题中提出的内容,但如果这是我的项目,我会在 didSelectRowAt 而不是 cellForRowAt 中使用它!

试试这段代码,只需复制并粘贴

 set UITextFieldDelegate, UITextViewDelegate 
       
     var strViewFooter = ""
     var textFieldIndexPath = IndexPath() 
     
   func numberOfSections(in tableView: UITableView) -> Int {
        arraycheck.count
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        1
    }
   func textViewDidEndEditing(_ textView: UITextView) {
        strViewFooter = textView.text
    }
    func textFieldDidEndEditing(_ textField: UITextField) {
                    
         let cell: UITableViewCell = textField.superview?.superview as! UITableViewCell
          let table: UITableView = cell.superview as! UITableView
             textFieldIndexPath = table.indexPath(for: cell)!
          }
                    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         guard let cell = tableView.dequeueReusableCell(withIdentifier: "TimeSheetTableViewCell", for: indexPath) as? TimeSheetTableViewCell else {
              return UITableViewCell()
            }
           cell.txtTimeSheet.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(doneButtonClicked))
            return cell
        }
      
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
            let vw = UIView()
            vw.backgroundColor = UIColor.clear
            let titleLabel = UITextView(frame: CGRect(x:10,y: 5 ,width:350,height:150))
            titleLabel.backgroundColor = UIColor.clear
            titleLabel.font = UIFont(name: "Montserrat-Regular", size: 12)
            titleLabel.text  = arrayFootter[section]
            titleLabel.tag = section
            vw.addSubview(titleLabel)
            titleLabel.keyboardToolbar.doneBarButton.setTarget(self, action: #selector(donebuttonClickedOnView))
            return vw
        }
    
         func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
            return 50
        }
              
           @objc func doneButtonClicked(_ sender: Any) {
                 print(textFieldIndexPath)
                 print(textFieldIndexPath.row)
                 print(textFieldIndexPath.section)
                
              }
       @objc func donebuttonClickedOnView(_ sender: UIBarButtonItem){
            arrayFootter.remove(at: sender.tag)
           arrayFootter.insert(strViewFooter, at: sender.tag)
           print(sender.tag)
        }

点击按钮获取索引路径。

@objc func doneButtonClicked(_ sender: Any) {
let tag = sender.tag
let index = IndexPath(row: tag, section: 0)
let cell = tableView.cellForRow(at: index) as! tableView
}