首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iPhone:使用导航栏显示模式UITableViewController

iPhone:使用导航栏显示模式UITableViewController
EN

Stack Overflow用户
提问于 2011-01-05 10:56:56
回答 4查看 55.1K关注 0票数 88

我展示的是一个模式视图,它是一个UITableViewController类。由于某种原因,当我显示导航栏时,它不会显示它。下面是我的代码:

SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
    detailViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    detailViewController.navigationController.navigationBarHidden = NO;
    [self.navigationController presentModalViewController:detailViewController animated:YES];
    detailViewController = nil;
    [detailViewController release];

我以为它是默认显示的?如果有帮助,我将从另一个类调用它,这个类也是一个由UINavigationController管理的UITableViewController。想法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-05 11:00:01

当您呈现一个模式视图控制器时,它不使用任何现有的导航控制器或导航栏。如果您想要的只是显示导航栏,则需要将导航栏添加为模式视图的子视图,并按您所做的那样显示它。

如果您想要呈现一个具有导航功能的模态视图控制器,则需要呈现一个包含细节视图控制器的模态导航控制器,如下所示:

SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
[detailViewController release];

navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentModalViewController:navController animated:YES];
[navController release];

你的模态控制器将管理它自己的导航栈。

票数 147
EN

Stack Overflow用户

发布于 2013-12-10 04:48:10

在iOS 7上,你只想在你的模式视图控制器上有一个导航栏来显示标题和一些按钮吗?在你的UITableViewController中试试这个魔术:

// in the .h
@property (strong) UINavigationBar* navigationBar;

//in the .m
- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = @"Awesome";
    self.navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectZero];
    [self.view addSubview:_navigationBar];
    [self.navigationBar pushNavigationItem:self.navigationItem animated:NO];
}

-(void)layoutNavigationBar{
    self.navigationBar.frame = CGRectMake(0, self.tableView.contentOffset.y, self.tableView.frame.size.width, self.topLayoutGuide.length + 44);
    self.tableView.contentInset = UIEdgeInsetsMake(self.navigationBar.frame.size.height, 0, 0, 0);
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    //no need to call super
    [self layoutNavigationBar];
}

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    [self layoutNavigationBar];
}
票数 18
EN

Stack Overflow用户

发布于 2015-06-19 05:17:40

我只是想对@Scott说的话补充一些东西。他的答案绝对是现在使用故事板,iOS 7和8的最简单和最被接受的方法。(很快,就会有9个)。

毫无疑问,将视图控制器添加到Storyboard并按照@Scott的描述嵌入它是正确的方法。

然后,只需通过按住control并从源视图控制器拖动到目标(您希望以模态方式显示的控制器)来添加片段,当出现带有片段类型选项的小视图时,选择“以模态方式呈现”。给它起个名字可能也不错(在下面的例子中,我使用了"presentMyModalViewController")。

我需要的一件事是,在@Scott的情况下,当您想要将一些数据实际传递给嵌入在导航控制器中的以模态表示的视图控制器时。

如果获取segue.destinationViewController,它将是一个UINavigationController,而不是您在UINavigationController中嵌入的控制器。

因此,为了获得导航控制器中的嵌入式视图控制器,我做了以下工作:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"presentMyModalViewController"]) {
        // This could be collapsed, but it's a little easier to see
        // what's going on written out this way.

        // First get the destination view controller, which will be a UINavigationController
        UINavigationController *nvc = (UINavigationController *)segue.destinationViewController;

        // To get the view controller we're interested in, grab the navigation controller's "topViewController" property
        MyModalViewController *vc = (EmailReceiptViewController *)[nvc topViewController];

        // Now that we have the reference to our view controller, we can set its properties here:
        vc.myAwesomeProperty = @"awesome!";
    }
}

希望这能有所帮助!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4600448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档