故事板导航控制器和标签栏控制器
我正在尝试在Storyboard中获得以下设置。
在开始的时候我有一个表格视图,而当我点击一个单元格时,它需要转换到标签栏控制器,它可以工作。 但是现在我想在两个最右边的控制器中有一个标题和一个额外的导航栏button。
但我似乎无法将button拖到那里,或者在设置标题时,什么也没有显示出来。 我怎样才能在故事板中实现这个设置?
编辑:
根据下面的答案更新了问题。
当我有这个新的设置(因此有一个额外的导航控制器之间),我可以在故事板中设置标题,但是在运行应用程序时,添加的标题不显示。
编辑:我已经上传了一个Xcode项目完全相同的设置。 也许它可以派上用场。
对于更改UINavigationBar
标题(不需要创build2个其他UINavigationController
),您可以使用
[self.parentViewController.navigationItem setTitle:@"Title"];
并添加正确的button使用
self.parentViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(myRightButton)];
从你的UITabBarController
引用的每个UIViewController
viewDidLoad
方法。
如果你想从你的UIViewController
的TabItems
使用“导航结构”,所以你可以编辑你的BUFViewController.m :
#import "BUFViewController.h" @interface BUFViewController () @end @implementation BUFViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self.parentViewController.navigationController setNavigationBarHidden:YES]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)]; } -(void)done{ [self.parentViewController.navigationController popToRootViewControllerAnimated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
你必须认为你的UITabBarController
在你的父级NavigationController
,所以你想隐藏父UINavigationBar
并显示你的。 之后,您将能够使用父级的UINavigationController
上的popToRootViewControllerAnimated
:来回到表格。
希望帮助:)
以防万一谁在寻找一个迅速的方法:
tabBarController?.title = "Your Title" tabBarController?.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Right Button Title", style: UIBarButtonItemStyle.Plain, target: self, action: "rightButtonFunction")
代码最好放置在viewDidAppear
或viewWillAppear
因此标题和button随着不同的标签被按下而改变。
这种方法也不需要额外的导航控制器。
我看了看你的testing应用程序,在导航栏下看到标题,非常微弱。 如果您select标签栏控制器,则可以看到两个导航栏,并取消选中“顶部酒吧”框。 但是,这会在导航栏上给出一个怪异的阴影。 我不知道是否有一个简单的方法来解决这个问题,但我不认为这个用户界面有两个导航栏看起来不错。 您可能想要取消初始导航控制器,并使用模态segue来显示标签栏控制器。 您可以添加一个栏button项目的导航控制器,你仍然必须做的模式视图控制器的解雇。
您需要用UINavigationViewControllers
replace这些视图控制器。
删除右侧的两个视图控制器。
将2个UINavigationViewControllers
拖放到故事板上,并将其定位到您想要的位置。
然后,您需要将这些新的导航视图控制器挂接到选项卡栏控制器。 按住Ctrl键并从标签栏控制器拖动到导航控制器。 从popup的菜单的“Relationship Segue”部分select“view controllers”。 为两个导航控制器做这个。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"Overview_Register"]) { WDRegisterViewController *obj=(WDRegisterViewController *)[segue destinationViewController]; obj.str_Title=@"Edit Profile"; obj.isRegister=NO; } } [self performSegueWithIdentifier:@"Overview_Measure" sender:nil]; UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; WDPeekViewController *Peek = (WDPeekViewController *)[sb instantiateViewControllerWithIdentifier:@"WDPeekViewController"]; [self.navigationController pushViewController:tabBarController animated:YES];