IOS - XCode 4 - iPhone 6.0 -添加返回按钮到子视图



注意:注意IOS开发。在过去10天左右的时间里,我阅读了一些教程和代码片段,并收集了足够危险的信息。我想要完成的是打开一个webview(作为子视图)的用户登录,但由于某种原因,我的导航控制器不显示后退按钮。我尝试了一些不同的事情,但无济于事,显然我做错了什么,所以寻求指导。

我的nav控制器被设置为根控制器,下一个堆栈是epViewController。这个视图控制器是应用程序的起点。在这个视图中,我有两个按钮,一个用于登录,另一个用于输入一些数据(与这个问题无关)。

epViewController代码片段:

- (IBAction)buttonToLoginView:(id)sender
{
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/wsapi/user/login"]]];
    [self.view addSubview:webView];
}

这个效果很好,因为子视图显示了导航栏和远程登录页面,但是没有返回按钮。基于一些其他的代码片段,我尝试了以下(在相同的epViewController文件):

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back???" style:UIBarButtonItemStylePlain target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;
}

但是这个自定义按钮只有在我点击按钮输入一些数据时才会被添加(实际上是到另一个具体的视图控制器而不是子视图)

我需要做什么来添加后退按钮到子视图?在这里使用子视图是否可取,我是否应该将它链接到另一个具体的视图控制器?

将导航控制器看作是所有实际视图控制器的容器。从这个意义上说,导航控制器并不是真正的"堆栈上的第一个",你的epViewController是"堆栈上的下一个"。相反,导航控制器实际的堆栈,epViewController是它的第一个(也是唯一的)项。当你的应用启动时,导航控制器会呈现它的根视图控制器,也就是你在屏幕上看到的。当你调用导航控制器的pushViewController:方法时,一个新的视图控制器被推到堆栈上,并显示后退按钮。

在你的情况下,我建议不要在你的主视图上显示web视图作为子视图。相反,把它放在自己的视图控制器中。在这个视图控制器中,你可以像以前那样添加后退按钮。然后使用[self presentModalViewController:]模态呈现视图控制器。这会让用户感觉更有条理和流畅,并避免了在主视图上摆弄子视图的麻烦。

最新更新