以编程方式从模态视图控制器切换父选项卡
Posted
技术标签:
【中文标题】以编程方式从模态视图控制器切换父选项卡【英文标题】:Programmatically switch parent tabs from modal view controller 【发布时间】:2012-08-29 15:42:42 【问题描述】:在我的应用中,您可以使用模态视图添加照片。当模态视图被关闭时,我想自动将标签栏控制器切换到第二个标签(照片查看器屏幕)。
我找到了 this answer 关于如何以编程方式切换选项卡的信息,但我不确定将这段代码放在模式视图控制器的什么位置。
【问题讨论】:
【参考方案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
被调用?
终于弄明白了——这是因为我在关闭模式视图之前调用了选项卡开关。一旦我切换了订单,它就可以正常工作了。以上是关于以编程方式从模态视图控制器切换父选项卡的主要内容,如果未能解决你的问题,请参考以下文章