使用导航栏和后退按钮创建模态视图

时间:2012-05-31 21:39:25

标签: iphone objective-c ios xcode uitabbarcontroller

我想用导航项创建一个模态视图(我的截图上的右视图),我希望它有一个'后退按钮'。我的应用程序是TabBar应用程序,我不希望此视图有一个标签栏,但我想加载一个类似于“push”类型的segue的前一个视图(我的屏幕截图上的左视图)。 我只能创建push segue以提供正确的导航回到左侧的视图,如果它被加载为模态视图,NavigationBar& TabBar消失了。有没有解决方法呢? 提前谢谢!

Here's my screenshot

2 个答案:

答案 0 :(得分:12)

只需使用条形按钮项将Navbar放在新视图上即可。通过控制从条形按钮项拖动到视图控制器的.h,为条形按钮项创建操作。然后,您可以使用委托和协议方法告诉第一个控制器何时按下按钮并让它使用[self dismissModalViewControllerAnimated:YES];

所以在你的第二个视图中创建一个完成方法的协议,如下所示:

@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

然后在您的操作中通过按钮调用:

-(IBAction)done:(id)sender{
   [self.delegate done];
}

您的第一个视图控制器需要实现协议<SecondViewControllerDelegate>

然后在你的第一个视图控制器中,在你发出错误之前将其设置为第二个视图控制器的委托。

-(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];
}

我就是这样做的。如果你没有很多协议和代表的经验,一开始可能会让人感到困惑,但它对我来说效果很好。

答案 1 :(得分:6)

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