Ответ 1
Не можете ли вы поместить какую-либо логику в didSelectRowAtIndexPath в отдельный метод и просто вызвать этот метод из файла didSelectRowAtIndexPath и где бы вы еще не захотели вызывать тот же код?
Мне было интересно, есть ли способ, чтобы мой код "коснулся" ячейки в моем UITableView, чтобы воспроизвести поведение, указанное в методе делегата - (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.
Я думаю, другими словами, можно ли программным способом вызывать метод делегата - (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
?
Не можете ли вы поместить какую-либо логику в didSelectRowAtIndexPath в отдельный метод и просто вызвать этот метод из файла didSelectRowAtIndexPath и где бы вы еще не захотели вызывать тот же код?
если вы хотите, чтобы ячейка выбрана, то есть выделите конкретную ячейку:
//select first row of first section
NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:selectedCellIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle];
если вы хотите дополнительно активировать действия в вашем методе didSelectRowAtIndexPath, вам нужно вручную вызвать метод делегата, это произойдет не автоматически:
[self tableView:self.tableView didSelectRowAtIndexPath:selectedCellIndexPath];
Swift 3.2 Решение
let indexPath = IndexPath(row: 2, section: 0) // change row and section according to you
tblView.selectRow(at: indexPath, animated: true)
tblView.delegate?.tableView!(tblView, didSelectRowAt: indexPath)
Это просто метод. Идите и вызовите его, как если бы вы использовали любой другой метод.
Это обновление 6.1. Когда вы используете segues - все советы хороши, но вы также должны призывать segue. Итак - добавить к совету и обобщить его
// ... assuming we just added a new row - which is one use of what this thread is trying to do
/* get new count - this is the row we are going to highlight - 0 based */
int newIndex = [dataArrayUnderlyingTable count]-1;
/* make it look pretty by highlighting it */
NSIndexPath *nip = [NSIndexPath indexPathForRow:newIndex inSection:0];
[[self tableView] selectRowAtIndexPath:nip animated:YES scrollPosition:UITableViewScrollPositionBottom];
/* run the code in the following method so it is not missed */
[self tableView:[self tableView] didSelectRowAtIndexPath:nip];
/* now 'tap' on it ... or simulate it */
[self performSegueWithIdentifier: @"viewChildDetails" sender: self];