【问题标题】:Programmatically switch parent tabs from modal view controller以编程方式从模态视图控制器切换父选项卡
【发布时间】:2012-08-29 15:42:42
【问题描述】:

在我的应用中,您可以使用模态视图添加照片。当模态视图被关闭时,我想自动将标签栏控制器切换到第二个标签(照片查看器屏幕)。

我找到了 this answer 关于如何以编程方式切换选项卡的信息,但我不确定将这段代码放在模式视图控制器的什么位置。

【问题讨论】:

    标签: ios iphone uitabbarcontroller


    【解决方案1】:

    您可以创建一个委托协议并为正在模态呈现的viewController分配一个委托属性,并使其在拍照后即将调用dismissModalViewControllerAnimated时通知其委托。

    编辑:添加了更多关于实现的信息

    在您以模态方式呈现的视图控制器类上,您将声明一个协议:

    @protocol YourUIViewControllerSubclassDelegate;
    

    然后,您将向您的类添加一个属性:

    @property (nonatomic, unsafe_unretained)id <YourUIViewControllerSubclassDelegate>delegate;
    

    最后,在类接口声明中调用 @end 后,您将完成协议:

    @protocol YourUIViewControllerSubclassDelegate <NSObject>
    - (void)viewController:(YourViewControllerSubclass *)viewController isBeingDismissedWithImage:(BOOL)imageTaken;
    @end
    

    因此,在 YourUIViewControllerSubclass 中,在调用dismissModalViewControllerAnimated 之前,您可以:

    [self.delegate viewController:self isBeingDismissedWithImage:YES or NO]; 
    

    因此,当您创建 YourUIViewControllerSubclass 时,您需要分配委托属性。谁是 YourUIViewControllerSubclass 的委托人,需要遵守 YourUIViewControllerSubclassDelegate 协议,并实现协议方法。在协议方法的这个实现中,您可以切换到您想要切换到的任何选项卡。

    【讨论】:

    • 能否提供一个快速的代码示例?我不确定这些碎片会去哪里。
    • 刚刚试了一下,效果很好,但现在我切换到的选项卡上没有调用viewDidLoad。知道为什么会这样吗?
    • 检查 viewDidLoad 之前是否被调用过。 viewDidLoad 只会在视图加载时被调用,除非 viewDidUnload 被调用,或者一个新的视图控制器实例已经被创建,否则不会被调用。
    • 实际上,我的意思是说viewDidAppear 没有被调用。 viewDidLoad 确实会被调用。有什么方法可以强制viewDidAppear 被调用?
    • 终于弄明白了——这是因为我在关闭模式视图之前调用了选项卡开关。一旦我切换了订单,它就可以正常工作了。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多