Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导航控制器的ios容器视图_Ios_Iphone_Objective C_Uinavigationbar - Fatal编程技术网

导航控制器的ios容器视图

导航控制器的ios容器视图,ios,iphone,objective-c,uinavigationbar,Ios,Iphone,Objective C,Uinavigationbar,我想我只是停留在设计的逻辑上。要考虑的重要因素……我试着用编程来做每件事。在AppDelegate中,我将选项卡栏控制器指定为根。我正在努力解决的是如何在选项卡栏控制器的顶部显示登录名以及它自己的导航栏和项目 首先,我尝试将LoginViewController作为根。为了导航到选项卡栏控制器,我使用了[self.navigationController setViewControllers]方法。这导致了一些问题,因为我猜它将登录视图转换为选项卡栏视图,所以当尝试注销并返回到根视图时,登录视图

我想我只是停留在设计的逻辑上。要考虑的重要因素……我试着用编程来做每件事。在AppDelegate中,我将选项卡栏控制器指定为根。我正在努力解决的是如何在选项卡栏控制器的顶部显示登录名以及它自己的导航栏和项目

首先,我尝试将LoginViewController作为根。为了导航到选项卡栏控制器,我使用了[self.navigationController setViewControllers]方法。这导致了一些问题,因为我猜它将登录视图转换为选项卡栏视图,所以当尝试注销并返回到根视图时,登录视图完全混乱了

现在,我正试图使选项卡栏控制器成为根视图,并使用我的LoginViewController添加一个容器视图。问题是1)选项卡栏项目1中的导航栏仍在显示,2)选项卡栏本身也在显示。所以我想我在问几个问题…如何让容器视图使用自己的导航控制器占据整个屏幕…实现注销按钮返回根视图控制器的最佳方法是什么

登录视图

- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
UIBarButtonItem *signup = [[UIBarButtonItem alloc]initWithTitle:@"Sign Up" style:UIBarButtonItemStyleBordered target:self action:@selector(showSignUp:)];
self.navigationItem.rightBarButtonItem = signup;
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Log In" style:UIBarButtonItemStyleBordered target:nil action:nil];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(50, 150, 100, 30);
[button setTitle:@"Login Done" forState:UIControlStateNormal];
[button addTarget:self action:@selector(push:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}

- (void)push:(id)sender{
[[NSUserDefaults standardUserDefaults]setObject:@"something" forKey:@"something"];
[self willMoveToParentViewController:nil];
[self.view removeFromSuperview];
[self removeFromParentViewController];
}

- (void)showSignUp:(id)sender{
SignUpViewController *signup = [[SignUpViewController alloc]init];
[self.navigationController pushViewController:signup animated:YES];
}
TabBarView1.m

- (void)viewWillAppear:(BOOL)animated{
if ([[NSUserDefaults standardUserDefaults]valueForKey:@"something"] == nil) {
    LogInViewController *login = [[LogInViewController alloc]init];
    [self addChildViewController:login];
    [self willMoveToParentViewController:self];
    [self.view addSubview:login.view];
    [login didMoveToParentViewController:self];
}
}
到目前为止,这些都是有效的…除了我没有看到LoginView的导航栏上有按钮的部分。第二种方法是注销:

TabView4.m

- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"Me";
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Logout" style:UIBarButtonItemStyleBordered target:self action:@selector(logout:)];
}

- (void)logout:(id)sender{
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"something"];
[[NSUserDefaults standardUserDefaults]synchronize];
self.tabBarController.selectedIndex = 0;
//that takes me back to the first tab and the login screen comes up...
//is that the best way to do this right now?
}
如果有人有什么建议(我知道有更好的方法),请告诉我。但请记住,我试图以编程方式实现这一点,而不使用故事板/segues/xib。请帮忙

正确答案:按下按钮时出现模态

- (void) modal:(id)sender{
LogInViewController *login = [[LogInViewController alloc]init];
UINavigationController *loginNav = [[UINavigationController alloc]initWithRootViewController:login];
loginNav.modalPresentationStyle = UIModalPresentationFullScreen;
loginNav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:loginNav animated:YES completion:nil];
}

这只是从按钮单击的第一个选项卡开始的一次尝试。它显示为全屏,但没有导航栏…

您可以始终显示包含登录视图控制器的navigationcontroller(模式全屏)。我不确定您为什么要使用容器视图来执行此操作。在第一个选项卡中,从控制器的ViewDidDisplay方法(没有动画,因此这将是用户看到的第一件事)显示导航控制器(其根视图控制器是登录视图控制器)。我刚刚无意中定制了模式视图。你们中有人能给我举个例子,说明如何以模式显示完整的导航视图控制器吗?我将添加我刚才尝试的代码…你能纠正我吗?我知道了…我需要在初始化LogInViewController后添加UINavigationController。现在它工作了!所有这些写作、挣扎、解释我的问题和如此简单的解决方案。我在故事板片段中使用了情态动词…但出于某种原因,我没有连接点以编程方式使用它!