Se você usar prepareForSegue:sender:
, não terá muito que mudar se mais tarde decidir acionar a segue de algum controle fora da visualização da tabela.
A prepareForSegue:sender:
mensagem é enviada para o controlador de visualização atual, então sugiro algo assim:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Assume self.view is the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
DetailObject *detail = [self detailForIndexPath:path];
[segue.destinationViewController setDetail:detail];
}
Em Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
self.view
estar apenassender
aqui? Não consegui nem[self.view indexPathForSelectedRow]
trabalhar, tive que fazer[sender indexPathForSelectedRow];
tableView.indexPathForSelectedRow()
contenha o valor correto quandoprepareFroSegue...
é chamado: sótableView(_:didSelectrowAtIndexPath:)
é chamado mais tarde.eu fiz isso e funcionou
fonte
Quando o remetente é UITableViewCell, você pode pedir a UITableView para consultar indexPath da célula.
fonte
se sua propriedade tableView estiver em outra classe e você tiver apenas uma seção , poderá usar a
tag
propriedade para armazenar a linha da célula como:E então você pode acessá-lo porque
sender
é a mesma célula com o valor da linha em sua tag:fonte
self.tableView.indexPathForSelectedRow
retorna a célula selecionada, mas não segue a célula do remetente, por exemplo, a célula do remetente não está selecionada (ação acessória) ou em caso de seleção múltipla. A melhor maneira é obter indexPath para o remetente segue:Em Swift:
fonte
Se você usar,
prepareForSegue:
pode verificar quem é o remetente e executar um código diferentePor exemplo em rápido
fonte