Я хочу реализовать пользовательский класс UITableViewCell, который состоит из подзонов, таких как метки, кнопки и изображения. Эти ячейки будут отображать контент, полученный из Интернета с использованием API.Обнаруживать UIButton при использовании пользовательского UITableViewCell
Я не хочу реализовывать метод делегата UITableView didSelectRowAtIndexPath
, так как это сделает всю ячейку доступной. Только кнопка в ячейке должна иметь возможность запускать любое действие.
Кнопка подключается из раскадровки к пользовательскому UITableViewCell через IBOutlet. Метод addTarget(_:action:forControlEvents:)
вызывается в UIButton в cellForRowAtIndexPath
класса UITableViewController.
Дорожный блок возникает, когда мы хотим обнаружить indexPath
выбранной ячейки в функции выбора кнопки.
Это как indexPath
для выбранной ячейки может быть обнаружено в функции Selector
@IBAction func doSomething(sender: AnyObject) {
var location: CGPoint = sender.convertPoint(CGPointZero, toView: self.tableView)
var indexPath: NSIndexPath = self.tableView.indexPathForRowAtPoint(location)!
println("The indexPath for Selected Cell is - \(indexPath.row)")
}
Хотя это успешно получает меня вокруг вопроса, на мой вопрос;
1) Вы обнаружили альтернативный способ использования UIButtons для передачи выбранных данных соты в пользовательский UITableViewCell?
2) Какова была бы лучшая практика до сих пор в Swift для реализации аналогичного сценария?
Кстати ваш отправитель имеет тип 'AnyObject' поэтому вызов' convertPoint: toView' без приведения его к UIView приведет к ошибке компиляции. – Jawwad
Согласен.Я думал, что тоже получаю ошибку компиляции, но упомянутая выше функция @IBAction func работает без таких ошибок. Хотя создание «отправителя» типа «UIView» было бы более чистым подходом. – Lester
Интересно. Возможно, это не дает компиляционной ошибки, поскольку вполне возможно, что отправитель, являющийся AnyObject, может реализовать метод convertPoint: toView. – Jawwad