Как вставить UIViewController в UINavigationController из отдельного UIView другого UIViewController, который использует это представление - PullRequest
0 голосов
/ 24 марта 2010

У меня есть UIViewController (AbcViewController) с NavigationController. AbcViewController использует UIView (AbcView) в качестве вида. AbcView имеет UITableView. Я установил источник данных TableView в AbcViewController и делегировал его SuperView, т.е. AbcView. Как я вставлю еще один UIViewController (XyzViewcontroller) в navigationController, когда выберу строку в этой таблице, потому что она дает

"ошибка: запрос члена 'navigationController' в чем-то, не являющемся структурой или объединением"

когда я делаю это:

[self.navigationController pushViewController:xyzViewcontroller animated:TRUE]; 

Я тоже так сделал:

AbcViewController *parentVC;
[parentVC.navigationController pushViewController:xyzViewcontroller animated:TRUE]; 

Несмотря на то, что он успешно строится, представление XyzViewcontroller не отображается. Он не выдвигает взгляд XyzViewcontroller на navigationController.

1 Ответ

3 голосов
/ 24 марта 2010

Мы можем сделать делегат на AbcView, чтобы мы могли обратиться к viewController представления, который в этом случае равен AbcViewController. Мы можем установить делегата как:

@interface AbcView : UIView

{ 
    id delegate;
}

@property(nonatomic, assign) id delegate;

Затем в AbcViewController установите делегата представления следующим образом:

[abcView setDelegate:self];

Теперь в табличном методе используя наш делегат из AbcView как:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   [delegate pushOtherView];

}

вызовет - (void)pushOtherView метод в AbcViewController, определение которого:

- (void)pushOtherView 
{   
    XyzViewcontroller * xyzViewcontroller = [[[XyzViewcontroller alloc] init] autorelease];
   [self.navigationController pushViewController:xyzViewcontroller animated:YES];   
}

Но перед использованием этого метода его следует упомянуть в протоколах, иначе он покажет

Warniing:

-pushOtherView 'не найден в протоколе (ах).

...