доступ к контроллеру навигации из отдельного класса делегата - PullRequest
0 голосов
/ 03 августа 2010

Я следую учебнику из книги, и там делегат и источник данных отделены от контроллера (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 из класса делегата?

1 Ответ

2 голосов
/ 03 августа 2010

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

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

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

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

...