1

我希望能够在父视图中的 UITableView 和标准 UIView 之间切换。基本上我有一个 UITableView 显示加载显示信息日志。我想在窗口的标题中有一个段控件,当用户点击时,它会转换到一个标准 UIView 的图形视图。

有问题的 UIViewController 需要能够从 RootViewController 堆栈中推送。

我已经尝试了很多事情,但我似乎无法让它发挥作用。有没有人有关于如何做到这一点的任何代码示例或建议?

4

3 回答 3

0

听起来您应该有一个包含段控件和子视图空间的父视图。当用户选择一个段时,您可以将相关视图(表格或图形)添加为视图的子视图,并设置其矩形以使其占据子区域。

-----------
| Segment |
-----------
|         |
|         |
|  Child  |
|         |
-----------
于 2009-03-17T19:36:48.217 回答
0

您根本不需要更改 UIViewController 即可在导航控制器中显示它。您的分段控制器应调用执行以下代码的方法:

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

我没有指向示例的链接,但如有必要,我可以回答更多问题。

-画

于 2010-01-16T23:12:10.903 回答
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];
    }
}
于 2010-10-21T21:10:42.187 回答