Ich habe eine UISearchController
mit einem separaten UITableViewController
als searchResultsController
.Holen Sie sich den Indexpfad von benutzerdefinierten Schaltfläche in AccessoryView eines UITableViewCell
class SearchResultsViewController: UITableViewController {
var fruits: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView(frame: .zero)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
@objc func addFruit(_ sender: UIButton) {
let point = tableView.convert(sender.bounds.origin, to: sender)
let indexPath = tableView.indexPathForRow(at: point)
print(indexPath?.row)
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fruits.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = fruits[indexPath.row]
cell.selectionStyle = .none
let addButton = UIButton(type: .custom)
addButton.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
addButton.setImage(UIImage(named: "add"), for: .normal)
addButton.contentMode = .scaleAspectFit
addButton.addTarget(self, action: #selector(addFruit(_:)), for: .touchUpInside)
addButton.sizeToFit()
cell.accessoryView = addButton
return cell
}
}
Ich brauche eine benutzerdefinierte Schaltfläche in Zellen, die Suchergebnisse angezeigt werden. Also fügte ich eine UIButton
als die Zellen accessoryView
hinzu. Und es sieht gut aus und funktioniert gut.
Jetzt muss ich die Zelle indexPath
erhalten, wenn der Benutzer auf diese Schaltfläche tippt.
Ich versuche, es wie unten gezeigt zu bekommen.
@objc func addFruit(_ sender: UIButton) {
let point = tableView.convert(sender.bounds.origin, to: sender)
let indexPath = tableView.indexPathForRow(at: point)
}
Aber es liefert nil
für jede Zelle zurück.
Gibt es eine andere Möglichkeit, die indexPath
von einer benutzerdefinierten Schaltfläche tippen? Ich habe auch hier eine demo project hinzugefügt.
versuch 'let cell = sender.superview? .superview als? CustomTableViewCell Lassen Sie indexPath = tblView.indexPath (für: Zelle!) ' –