微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift中获取textField的IndexPath

如何解决如何在Swift中获取textField的IndexPath

我在我的应用程序中使用分段的tableView,tableView的每一行都包含一个textField,当textFieldDidBeginEditing时,我需要知道该textField的indexPath。使用标记只能获取部分或行,并且创建扩展名UITextField不允许添加变量。我该怎么办?

解决方法

有很多方法可以做到,但设计还是很糟糕的,建议您将文本字段委托放在单元格类中。

您可以尝试使用textField.superview获取准确的单元格/内容视图,将其转换为MyTableViewCell,然后使用tableView.indexPath(for: cell)获取索引。

不需要标签。

示例:

var view: UIView = textField
while !view.isKind(of: UITableViewCell.self),let superView = view.superview {
    view = superView
}
if let view = view as? MyTableViewCell {
   //Do sth
}
,

我喜欢从文本字段转到单元格,并向表视图查询其索引路径。

extension UIResponder {
    func next<T:UIResponder>(ofType: T.Type) -> T? {
        let r = self.next
        if let r = r as? T ?? r?.next(ofType: T.self) {
            return r
        } else {
            return nil
        }
    }
}

func textFieldDidBeginEditing(_ textField: UITextField) {
    if let cell = textField.next(ofType: MyCell.self) {
        if let ip = self.tableView.indexPath(for:cell) {
           // whatever
        }
    }
}
,

cellForRow

var section = indexPath.section + 1
var row = indexPath.row + 1
index = Int("\(section)0\(row)")!

将textFields的标签设置为index

textFieldDidBeginEditing

let indexString = "\(textField.tag)"
let parts = indexString.components(separatedBy: "0")
let row = Int(parts[1])! - 1
let section = Int(parts[0])! - 1
,

获取包含文本字段的单元格的indexPath的最简单方法

func getIndexPathFromView(_ sender : UIView) -> IndexPath? {
    let point = sender.convert(CGPoint.zero,to: self.tblView)
    let indexPath = self.tblView.indexPathForRow(at: point)
    return indexPath
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。