UINavigationController с UITableView и UIView - PullRequest
1 голос
/ 17 марта 2009

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

UIViewController, о котором идет речь, нуждается в возможности выталкивания из стека RootViewController.

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

Ответы [ 3 ]

0 голосов
/ 17 января 2010

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

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

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

-Drew

0 голосов
/ 22 октября 2010

Это на самом деле не так сложно, как казалось на первый взгляд. В основном, если у вас есть 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 голосов
/ 17 марта 2009

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

-----------
| Segment |
-----------
|         |
|         |
|  Child  |
|         |
-----------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...