2009-03-17 3 views
1

Я хочу иметь возможность переключаться между UITableView и стандартным UIView в родительском представлении. В основном у меня есть UITableView, который показывает при загрузке отображение журнала информации. Я хочу иметь элемент управления сегментами в заголовке окна, который, когда пользователь забирает, переходит к графическому виду, который является стандартным UIView.UINavigationController с UITableView и UIView

Соответствующий UIViewController должен быть перенаправлен из стека RootViewController.

Я пробовал несколько вещей, но я не могу заставить это работать. У кого-нибудь есть примеры кода или предложения о том, как это можно сделать?

+0

Я нашел ответ. Я опубликую ниже – JamesSugrue

ответ

0

Это на самом деле не так сложно, как сначала казалось. В принципе, если у вас есть ParentViewController с пустым представлением и NavController сверху. Поместите элемент управления сегмента в центральном окне NavController.

Затем вы просто переключаете представления ViewController, когда изменяется управление сегментом. Единственное, что вам нужно сделать, это сохранить указатель на текущее представление и удалить его перед добавлением нового представления в parentVC. Код ниже:

- (void)showView 
{ 
    if (_currentView != nil) 
     [_currentView removeFromSuperview]; 

    if (segmentControl.selectedSegmentIndex == 0) 
    { 
     if (_graph == nil) 
      _graph = [[DrawGraphViewController alloc] initWithNibName:@"DrawGraphViewController" bundle:[NSBundle mainBundle]]; 

     self.navigationItem.rightBarButtonItem = nil; 
     _currentView = _graph.view; 

     [contentView addSubview:_graph.view]; 
     [_graph reloadGraph]; 
    } 
    else if (segmentControl.selectedSegmentIndex == 1) 
    { 
     if (_log == nil) 
      _log = [[LogTableViewController alloc] initWithNibName:@"LogTableView" bundle:[NSBundle mainBundle]]; 

     self.navigationItem.rightBarButtonItem = self.editButtonItem; 
     _currentView = _log.view; 
     [contentView addSubview:_log.view]; 
     [_log loadData]; 
    } 
    else { 
     if (_export == nil) 
      _export = [[ExportViewController alloc] initWithNibName:@"ExportView" bundle:[NSBundle mainBundle]]; 

     _currentView = _export.view; 
     [contentView addSubview:_export.view]; 
    } 
} 
0

Похоже, что у вас должно быть родительское представление, содержащее элемент управления сегментами и пространство для детского представления. Когда пользователь выбирает сегмент, вы должны добавить соответствующий вид (таблицу или график) в качестве дочернего элемента представления и установить его прямоугольник, чтобы он занимал дочернюю область.

----------- 
| Segment | 
----------- 
|   | 
|   | 
| Child | 
|   | 
----------- 
0

Вам вообще не нужно менять UIViewController, чтобы отобразить его в контроллере навигации. Ваш сегментирован контроллер должен вызвать метод, который выполняет следующий код:

UIViewController *myViewController = [[UIViewController alloc] init]; 
[self.navigationController pushViewController:myViewController animated:YES]; 
[myViewController release]; 

У меня нет ссылки на пример, но я могу ответить на дополнительные вопросы, если это необходимо.

-Drew