0

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

我的导航控制器设置为根控制器,堆栈上的下一个是 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;
}

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

我需要做什么才能将后退按钮添加到子视图?甚至建议在这里使用子视图,我应该将它链接到另一个具体的视图控制器吗?

4

1 回答 1

1

将导航控制器视为所有实际视图控制器的容器。从这个意义上说,导航控制器并不是真正的“堆栈中的第一个”,而您epViewController是“堆栈中的下一个”。相反,导航控制器实际的堆栈,epViewController是它的第一个(也是唯一的)项目。当您的应用程序启动时,导航控制器会显示其根视图控制器,这就是您在屏幕上看到的内容。当您调用导航控制器的pushViewController:方法时,一个新的视图控制器被压入堆栈,并显示返回按钮。

在您的情况下,我建议不要将 Web 视图显示为主视图上的子视图。相反,将其放在自己的视图控制器中。在此视图控制器中,您可以像以前一样添加后退按钮。然后使用模态显示该视图控制器[self presentModalViewController:]。这会让用户感觉更有条理和流畅,并避免在主视图上摆弄子视图的业务。

于 2013-05-09T00:14:35.133 回答