如何解决如何在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 举报,一经查实,本站将立刻删除。