2010-08-03 2 views
0

Я follwing учебник из книги и есть делегат и источник данных отделены от контроллера (MyViewController.m)доступа к навигации контроллер от отдельного делегата класса

[self setDataSource:[[MyViewDataSource alloc] 
[self setDelegate:[[MyViewDelegate alloc] 

для понимания, теперь я хочу, чтобы совать контроллер от класса делегата (MyViewDelegate.m)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
     2ndViewController *controller = [[2ndViewController alloc]]; 
     [[self navController] pushViewController:controller animated:YES]; 

, конечно, это не будет работать, так как NavController сидит в приложение делегата. Но как мне лучше всего получить доступ к navcontroller из класса делегата?

ответ

2

Вы можете сделать что-то вроде

UINavigationController *navController = [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] navigationController]; 

Тем не менее, вы должны спросить себя, почему вы должны это сделать, и если есть лучший способ, который больше в соответствии с MVC (модель-контроллер) и правила инкапсуляции.

Например, UIViewController представляет объект с именем navigationController, который, как поясняется документацией, вернет соответствующий контроллер навигации для данного контроллера вида.

+0

Да, если ваш класс делегата отличается от вашего контроллера представлений и нуждается в доступе к контроллеру навигации, лучшим подходом является установка свойства объекта делегата при его инициализации. –

+0

Спасибо за быстрые ответы! Единственная причина, по которой я хотел это сделать, - заставить его работать с помощью учебников ... –

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