Iphone 使用导航栏和“后退”按钮创建模式视图

Iphone 使用导航栏和“后退”按钮创建模式视图,iphone,objective-c,ios,xcode,uitabbarcontroller,Iphone,Objective C,Ios,Xcode,Uitabbarcontroller,我想创建一个带有导航项的模式视图(屏幕截图上的右视图),并希望它有一个“后退按钮”。我的应用程序是TabBar应用程序,我不希望这个视图有一个TabBar,但我想加载一个以前的视图(我的屏幕截图上的左视图),带有类似于“推”类型的序列。 我只能创建push segue以提供返回左侧视图的右导航,如果它作为模式视图加载,则导航栏和选项卡栏将消失。有什么解决办法吗? 提前谢谢 您需要将右侧视图控制器包装在新的导航控制器中。在IB中,选择它并选择菜单项Editor->Embed In->Navigat

我想创建一个带有导航项的模式视图(屏幕截图上的右视图),并希望它有一个“后退按钮”。我的应用程序是TabBar应用程序,我不希望这个视图有一个TabBar,但我想加载一个以前的视图(我的屏幕截图上的左视图),带有类似于“推”类型的序列。 我只能创建push segue以提供返回左侧视图的右导航,如果它作为模式视图加载,则导航栏和选项卡栏将消失。有什么解决办法吗? 提前谢谢


您需要将右侧视图控制器包装在新的导航控制器中。在IB中,选择它并选择菜单项
Editor->Embed In->Navigation Controller
,IB将显示一个导航栏,您可以根据自己的心意自定义导航栏

只需在新视图上放置一个导航栏,其中包含一个栏按钮项。通过将控件从条形按钮项拖动到视图控制器的.h,为条形按钮项创建操作。然后,您可以使用委托和协议方法告知第一个控制器何时按下按钮,并让其使用
[自我解除ModalViewController激活:是]

因此,在您的第二个视图中,使用方法创建协议,如下所示:

@protocol SecondViewControllerDelegate <NSObject>

-(void) done;

@end

@interface SecondViewController : UIViewController {
    ...
    id delegate;
}

...

@property (nonatomic, assign) id<SecondViewControllerDelegate> delegate;

-(IBAction)done:(id)sender;  //this will be linked to your nav bar button.
@end
您的第一个视图控制器将需要实现协议

然后在第一个视图控制器中,在继续之前将其设置为第二个视图控制器的代理

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"])
    {
        SecondViewController *viewController = segue.destinationViewController;
        viewController.delegate = self;
    }
}
最后,在第一个视图控制器中捕获来自代理的完成调用:

-(void) done
{
    [self dismissModalViewControllerAnimated:YES];
}

我就是这样做的。如果您在协议和委托方面没有太多经验,一开始可能会让人感到困惑,但对我来说效果很好。

这能让我以模式视图的形式展示它吗?是的,的确如此。在iPad上,你可以看到更小的集中视图。您必须在导航栏中实现自己的按钮,以进行解雇。谢谢。在iOS 7中,如果我只是拖动导航栏,它看起来会很糟糕,因为“时间栏”的背景与导航栏不同,没有灰色背景。但这种方法解决了问题,而且看起来更优雅。显示模式视图(右侧)并使用“后退”按钮将其关闭以返回左侧显示的UITableView有什么错?因为这是一个具有动态内容的UIWebView,我希望“后退”按钮位于导航栏中,如果有任何输入错误,请忽略我,我刚才是从头开始打的。
-(void) done
{
    [self dismissModalViewControllerAnimated:YES];
}