从 uitabbarController 视图中关闭模态视图

Posted

技术标签:

【中文标题】从 uitabbarController 视图中关闭模态视图【英文标题】:Dismiss Modal View from uitabbarController view 【发布时间】:2012-06-08 07:27:52 【问题描述】:

我呈现了一个模态视图,其中呈现的视图包含一个标签栏控制器。视图显示正确,但是当我将dismissModalViewController添加到标签栏视图控制器中的按钮时,它没有被关闭。视图没有发生任何事情。

我怎么能关闭那个模态视图控制器?

【问题讨论】:

你如何关闭它? [self dismissViewControllerAnimated:NO completion: nil] 是我对此的最佳猜测。请注意,您应该使用 dismissViewControllerpresentViewController 而不是 ...ModalViewController,因为它们在 ios 5.1 中已被弃用。 【参考方案1】:

呈现视图控制器也应该是处理模态视图控制器解除的控制器。您应该使用委托来通知呈现视图控制器它可以关闭它呈现的视图控制器:

在模态视图控制器中:

@protocol SomeProtocol<NSObject>
- (void)didFinishDoingWhatItNeedsToDo:(id)sender;
@end

@interface ModalViewController : UIViewController
@property (nonatomic, weak) id <SomeProtocol> delegate;
@end

@implementation

- (IBAction)buttonClicked:(id)sender 

    [self.delegate didFinishDoingWhatItNeedsToDo:self];


然后在呈现视图控制器中:

@interface SomeObject : UIViewController <SomeDelegate>
@end

@implementation

- (void)someMethod 

    ModalViewController *mvc = [[ModalViewController alloc] init];
    mvc.delegate = self;

    [self presentViewController:mvc animated:YES completion:nil];


- (void)didFinishDoingWhatItNeedsToDo:(id)sender 

    [self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

【参考方案2】:

当你向控制器展示标签栏时,你一定用过:

[self presentModalViewController:newTabBarController animated:YES];

所以当你想辞退时,你必须说,

[self.tabBarController dismissModalViewControllerAnimated:YES]

【讨论】:

【参考方案3】:
[[self parentViewController] dismissModalViewControllerAnimated:YES];

【讨论】:

为什么要关闭parentViewController

以上是关于从 uitabbarController 视图中关闭模态视图的主要内容,如果未能解决你的问题,请参考以下文章

从 UITabBarController 选项卡根视图呈现 UINavigationController

从嵌套在 UITabBarController 中的导航控制器推送视图控制器?

在 UITabBarController 中,如何从一个视图控制器切换到另一个视图控制器并保留标签栏?

如何从 UITabBarController 页面导航到具有 PUSH 样式的另一个视图控制器

如何识别从UITabBarController中的更多选项卡或单独选项卡单击视图控制器?

从单独的 UIViewController 切换 UITabBarController 选项卡[重复]