2015-07-27 3 views
2

Возможно, вопрос недостаточно ясен.Как я могу узнать, какая indexPath.row моя кнопка, когда я нажимаю кнопку, чтобы нажать другой ViewController?

Я имею в виду, что у меня есть TableView, и у него есть Prototype Cell, и эта ячейка имеет кнопку.

Я установил SEGUE имя «Formore», который объединить 2 ViewControllers

Но я повторно использовать этот сотовый много раз.

И это результат:

Когда я нажимаю все кнопки во все cells.It будет переходить к другому ViewController.

Но мне нужно знать, на какую кнопку я нажал, потому что этот ViewController необходимо инициализировать в соответствии с той ячейкой, которую я нажал.

Итак, как я могу узнать, какую ячейку я нажал, когда я многократно использую ячейку.

+0

Это обычная кнопка? – iRiziya

+0

@FrequencyMatched Нет, это обычная кнопка. Но она связана с классом UITableViewCell – Hashira

+0

Является ли это настраиваемой ячейкой? – streem

ответ

4

Лучший способ сделать что-либо с пользовательскими ячейками - создать собственный класс.

Таким образом, кнопка является свойством класса, и действие может быть отправлено в ячейку вместо этого.

Таким образом, вы можете использовать блок для настройки того, что делает кнопка в момент ее создания.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // create the cell... 

    cell.buttonBlock = { 
     self.buttonTappedAtIndexPath(indexPath) 
    } 

    return cell 
} 

Или что-то в этом роде.

+0

проверить этот вопрос чувак http://stackoverflow.com/questions/31649220/detect-button-click-in-table-view-ios-xcode-for-multiple-row-and-section –

+0

@nischalhada это тот же вопрос и ответ, что это вопрос. – Fogmeister

4

У меня также была эта проблема один раз, и я сделал это.

// CustomCellClass 

var tableViewdelegate: MyTableViewDelegateClass? 

// button in cell action 
@IBAction func buttonPressed(sender: AnyObject) { 
    tableViewdelegate?.buttonPressedInCell(cell: self) 
} 

// MyTableViewDelegateClass 

func buttonPressedInCell(cell: CustomCellClass) { 
    let indexPath = tableView.indexPathForCell(cell) 

    // other logic you have 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell = // create your cell or deque 

    cell.tableViewdelegate = self 

    return cell 
} 
+1

Жизнеспособной альтернативой использованию блоков/закрытий является использование метода делегирования/протокола, подобного этому. – Fogmeister

1

Я пробовал весь вышеперечисленный метод, но не работал. Возможно, я не могу понять ответы хорошо.

Но я исправил эту проблему самостоятельно.

Это то, что я сделал:

1, создать новый класс наследует UIButton с именем «Formore» и объявить вар с именем «строкой»

2, Объединить ForMoreButton к пользовательской ячейке с именем 'ForMoreButton'

3, Присвоить indexPath.row к cell.ForMoreButton.row при создании ячейки в методе

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

4, в Vi ewController my tableview внутри, объедините ForMoreButton к этому ViewController непосредственно с действием «ButtonTapped», а затем мы можем получить строку из (отправителя как! ForMore) .row

+0

Я тоже не могу это понять, не могли бы вы объяснить, что лучше? Мне это нужно. –

Смежные вопросы