【问题标题】:Is there a way to see if the current UIViewController appeared from the dismissal of another UIViewController有没有办法查看当前 UIViewController 是否从另一个 UIViewController 的解雇中出现
【发布时间】:2013-11-19 19:12:09
【问题描述】:

我的问题是我有一个主 UIViewController 允许通过它呈现其他三个 UIViewController,但我想知道是否有一种方法可以在我关闭其他三个控制器之一后通知主 UIViewController 或告诉它现在出现是由于上述控制器的解雇?

谢谢你!

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller dismiss


    【解决方案1】:

    如果您的主视图控制器实现:

    • (void)dismissViewControllerAnimated:(BOOL)标志完成:(void (^)(void))完成

    并且呈现的视图控制器向它发送该消息,你会知道,因为那时它可以查询以查看“presentedViewController”是什么。

    【讨论】:

    • 对不起,我将该方法添加到我的主视图控制器,但我如何从另一个控制器发送回消息?我对使用完成块非常不熟悉...谢谢!
    • 不需要完成块。从您当前可见的视图控制器中,执行以下操作以解除:[self.presentingViewController dismissViewControllerAnimated:YES nil];
    【解决方案2】:

    当您关闭三个 ViewController 中的一个时,您可以通过 NSNotification 向主 ViewController 发出信号:它们已被关闭:

        NSDictionary *viewControllerInfo = @{@"ViewControllerClass" : NSStringFromClass([self class])}
        [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewControllerDismissed" object:nil userInfo:viewControllerInfo];
    

    在你的主视图控制器中:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewControllerDismissed:) name:@"ViewControllerDismissed" object:nil];
    

    并用这个方法响应:

    - (void)viewControllerDismissed:(NSNotification *)notification {
        NSDictionary *viewControllerInfo = [notification userInfo];
    
       //  Dictionary should be same as the one passed through the noticiation.
    }
    

    补充说明:如果您使用的是 UIStoryboard,那么您可以使用 unwind segue.

    编辑:更新字典以使用 NSStringFromClass()

    【讨论】:

    • 真棒!但是不,我不使用故事板。另外,关于您的回答的问题......如果我不在乎三个视图控制器中的哪个被解雇怎么办?一旦他们被解雇,我只想要同样的效果。我可以从那里删除什么?
    • 好吧,没关系这个问题。我删除了 NSDictionary,它将通过。非常感谢!
    • 我很好奇:如果您不关心哪个 viewController 被解除,难道您不能在主 viewController 的 viewWillAppear/viewDidAppear 方法中添加逻辑以在解除后触发您想要的任何操作吗?您可以在呈现可在 viewWillAppear 中使用的视图控制器时设置一个 BOOL 来确定它是否是通过关闭 viewController 触发的。 (另外,如果对我的原始答案感到满意,您可以将其标记为已接受吗?)
    • 是的,我可以,但我想要实现的是一个自定义的“加载视图”,当我每个控制器被呈现和关闭时触​​发......如果我使用主控制器 viewDidAppear,那么这个自定义“加载视图”将在应用程序启动时触发,我不需要。您的解决方案可以满足我的需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多