Ответ 1
Похоже, вам нужен делегат:
Затем просто передайте ячейку как параметр для делегата, а затем вы можете легко сделать tableView.indexPathForCell(cellFromDelegateMethod)
У меня есть пользовательский подкласс UITableViewCell
и связанный с ним xib. У меня есть UILabel
и UIButton
в этой ячейке, и я подключил внутреннее действие кнопки к подклассу.
Мне нужно, чтобы эта кнопка в ячейке была нажата, чтобы получить индексный путь ячейки, у которой есть эта кнопка. И, возможно, отправьте его обратно в контроллер просмотра через делегат или что-то в этом роде.
Так как я внутри подкласса UITableViewCell
, я не могу использовать такое решение, как this, потому что у меня нет ссылки на представление таблицы внутри подкласс класса. После дальнейшего исследования я нашел другое решение, и я внедрил его в Swift вот так.
import UIKit
class ContactCell: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
selectionStyle = .None
}
@IBAction func callButtonPressed(sender: UIButton) {
let indexPath = (self.superview as UITableView).indexPathForCell(self)
println("indexPath?.row")
}
}
Но когда я нажимаю на кнопку, она вылетает с сообщением об ошибке: Слишком динамический динамический сбой.
Любая идея, что не так с моим кодом?
Или я открыт для любых других предложений, которые позволили бы мне достичь желаемого результата любым другим способом.
Спасибо.
Похоже, вам нужен делегат:
Затем просто передайте ячейку как параметр для делегата, а затем вы можете легко сделать tableView.indexPathForCell(cellFromDelegateMethod)
UIButton.Type действительно не имеет супервизора элемента, но отправитель имеет
var cell: UITableViewCell = sender.superview.superview as UITableViewCell
Эй вы можете также использовать "тег" кнопки. Внутри метода cellForRowAt делегата таблицы вы можете пометить кнопку с помощью Indexpath.row. вот пример, который я пытался сказать.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// get ur cell nib .As it has a button
cell.startOrConntinuBtn.addTarget(self, action: #selector(sumbitOrContinue), for: .touchUpInside)
cell.startOrConntinuBtn.tag = indexPath.row }
и в методе касания "sumbitOrContinue" -
func sumbitOrContinue(sender: UIButton!) {
let tag = sender.tag
// do what you want to do like this example
let detail = self.detailList[tag]
let vc = self.storyboard?.instantiateViewController(withIdentifier: "mockExamInt") as! MockWindowVc
vc.detailId = detail.id
self.navigationController?.pushViewController(vc, animated: true)}