【问题标题】:Create a modal view with navigation bar and back button使用导航栏和后退按钮创建模态视图
【发布时间】:2012-06-01 06:00:17
【问题描述】:

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

【问题讨论】:

  • 显示模态视图(在右侧)并有一个后退按钮将其关闭以返回到左侧显示的 UITableView 有什么问题?
  • 因为它是一个具有动态内容的 UIWebView,我希望后退按钮位于导航栏中

标签: iphone objective-c ios xcode uitabbarcontroller


【解决方案1】:

只需在带有条形按钮项的新视图上放置一个导航栏。通过控制从条形按钮项拖动到视图控制器的 .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];
}

您的第一个视图控制器需要实现协议&lt;SecondViewControllerDelegate&gt;

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

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

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

【讨论】:

  • 请问有错别字,我刚才都是从头打出来的。
【解决方案2】:

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

【讨论】:

  • 这可以让我将其呈现为模态视图吗?
  • 是的,确实如此。在 iPad 上,您可以将其设为更小、更集中的视图。您必须在导航栏中实现自己的按钮才能关闭。
  • 谢谢。在 iOS 7 中,如果我只是拖动导航栏,它会看起来很糟糕,因为“时间栏”的背景,与导航栏不同,没有灰色背景。但是这种方法解决了问题,看起来更优雅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
相关资源
最近更新 更多