В приведенном ниже коде я просто пытаюсь настроить segue непосредственно из UIViewController
в DetailViewController
. Обычно я делаю segue из UITableViewCell
(который, я думаю, более ясен), но на этот раз я просто хотел попробовать перейти непосредственно из ViewController
, используя -tableView:didSelectRowAtIndexPath:
Мой вопрос: Я попал в ситуацию, когда мне нужно было получить доступ к UITableViewCell
indexPath
из -prepareForSegue:sender:
. Моим решением было отправить indexPath
через sender
. Обычно я задавал отправителю self
здесь, я огляделся и не могу найти ссылки на это, мне просто интересно, если использование отправителя для прохождения indexPath приемлемо? Я уверен, что это так, и я уверен, что прочитал, что вы можете где-то раньше, но теперь я не могу найти ссылку на него.
// ------------------------------------------------------------------- **
// DELEGATE: UITableView
// ------------------------------------------------------------------- **
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __PRETTY_FUNCTION__);
[self performSegueWithIdentifier:@"SEGUE_TWO" sender:indexPath];
}
// ------------------------------------------------------------------- **
// SEGUE: ViewController_ONE > DetailViewController
// ------------------------------------------------------------------- **
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"%s", __PRETTY_FUNCTION__);
if([[segue identifier] isEqualToString:@"SEGUE_TWO"]) {
NSUInteger cellRow = [(NSIndexPath *)sender row];
DetailViewController *destinationController = [segue destinationViewController];
[destinationController setDataString:[[self dataList] objectAtIndex:cellRow]];
}
}
EDIT: Я искал в этом случае
NSIndexPath *indexPath = [[self tableView] indexPathForSelectedRow];
по существу способ получить indexPath
в -performForSegue:sender:
без необходимости передавать его через параметр отправителя (в -performSegueWithIdentifier:sender:
)