вызов контроллера представления из класса делегата tableView

Я отделил свой делегат tableView и источник данных от контроллера tableView. пока работает отлично. однако теперь я пришел к тому, что мне нужно реализовать метод делегата didSelectRowAtIndexPath. Когда этот метод вызывается, мне нужно выполнить переход от моего контроллера представления, но у меня нет ссылки на контроллер представления из класса делегата для вызова метода, например [myViewController PerformSegueWithIdentifier...

Каков правильный способ справиться с этим? Мне просто добавить свойство к моему делегату для хранения контроллера представления? Это не кажется хорошей идеей, поскольку контроллер представления уже имеет ссылку на делегата. Как я могу сослаться на VC? Я думал, что могу опубликовать уведомление, но должен быть лучший способ. Я всегда просто использовал контроллер представления в качестве делегата, поэтому мне никогда не приходилось иметь дело с этим раньше.


person Stone Preston    schedule 10.09.2014    source источник


Ответы (1)


Этот вопрос кажется мне странным, потому что если вы создаете переход в раскадровке, скажем, push-переход из ячейки tableView в другой контроллер представления, то при нажатии на ячейку tableview автоматически запускается переход. Вы можете заниматься другими делами в

- (void)prepareForSegue:(UIStoryboardSegue *)segue
                 sender:(id)sender

что касается

добавить свойство к моему делегату для хранения контроллера представления

Ничего страшного. Потому что

@property(nonatomic, assign) id< UITableViewDelegate > delegate

viewcontroller не сохраняет делегата

person dopcn    schedule 11.09.2014
comment
если вы используете переход от ячейки к другому VC, вы не можете использовать didSelectRowAtIndexPath, потому что он вызывается после prepareForSegue. Первоначально я настроил переход как ручной переход, поэтому мне нужно было вызвать PerformSegueWithidentifier из didSelectRowAtIndexPath моего делегата. Однако в итоге я сделал это по-вашему и изменил переход от ячейки к VC, а затем просто использовал prepareForSegue и использовал self.tableView.indexPathForSelectedRow.row для индексации моего источника данных. так что, в конце концов, вы были правы, мне не нужно было ничего из того, что, как я думал, я делал. Спасибо - person Stone Preston; 11.09.2014