5

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

这是我的截图

4

2 回答 2

12

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

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

@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>

然后在您的第一个视图控制器中,将其设置为您的第二个视图控制器的委托,然后再进行 segue。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"Second View Modal Segue Identifier"])
    {
        SecondViewController *viewController = segue.destinationViewController;
        viewController.delegate = self;
    }
}

最后,在您的第一个视图控制器中捕获来自委托的 done 调用:

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

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

于 2012-05-31T22:00:17.130 回答
6

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

于 2012-05-31T21:47:36.487 回答