IOS-XCode 4-iPhone 6.0-向子视图添加后退按钮

IOS-XCode 4-iPhone 6.0-向子视图添加后退按钮,iphone,ios,objective-c,Iphone,Ios,Objective C,注意:IOS开发中的N00b。在过去10天左右的时间里,我已经阅读了一些教程和代码片段,收集了足够多的信息,足以造成危险。我试图实现的是打开一个webview(作为子视图)供用户登录,但由于某些原因,我的导航控制器没有显示后退按钮。我尝试了一些不同的方法,但都没有效果,很明显我做错了什么,所以寻求指导 我的导航控制器设置为根控制器,堆栈上的下一个是epViewController。此视图控制器是应用程序的起点。从这个视图中,我有两个按钮,一个用于登录,另一个用于输入一些数据(与此问题无关) ep

注意:IOS开发中的N00b。在过去10天左右的时间里,我已经阅读了一些教程和代码片段,收集了足够多的信息,足以造成危险。我试图实现的是打开一个webview(作为子视图)供用户登录,但由于某些原因,我的导航控制器没有显示后退按钮。我尝试了一些不同的方法,但都没有效果,很明显我做错了什么,所以寻求指导

我的导航控制器设置为根控制器,堆栈上的下一个是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文件中):

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


我需要做什么才能将“后退”按钮添加到子视图中?是否建议在此处使用子视图,而不是将其链接到另一个具体的视图控制器?

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


在您的情况下,我建议不要在主视图中将web视图显示为子视图。相反,将其放在自己的视图控制器中。在该视图控制器中,您可以在尝试之前添加“后退”按钮。然后使用
[self-presentModalViewController:
以模态方式呈现视图控制器。这将让用户感觉更有条理、更流畅,并避免了在主视图上摆弄子视图

只要试着理解你正在使用的术语——你有一个名为
epViewController
的视图控制器,作为你的根VC包含在导航控制器中。然后,在该视图控制器的视图中有一个web视图子视图。但是您实际上还没有将新的视图控制器推到原来的视图控制器之上,那么“后退”按钮到底应该扮演什么角色呢?是的,您是正确的。“后退”按钮应关闭子视图并呈现原始视图(2个按钮登录并输入数据)。您必须按下一个新的控制器才能获得“后退”按钮——您只需向根视图控制器添加一个子视图。上一个问题的答案是肯定的。请使用uiview而不是webview,并在uiview中添加webview和自定义后退按钮。在控制器中实现按钮touchupinside回调方法以关闭该uiview。
- (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;
}