以编程方式从模态视图控制器切换父选项卡

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 被调用? 终于弄明白了——这是因为我在关闭模式视图之前调用了选项卡开关。一旦我切换了订单,它就可以正常工作了。

以上是关于以编程方式从模态视图控制器切换父选项卡的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改 TabViewController 中的选定选项卡

在选项卡栏控制器中选择时以模态方式呈现视图控制器

以编程方式使用选项卡更改片段的选项卡索引

选项卡不会以编程方式切换导航控制器内的 tabBar

iOS 以编程方式转到选项卡和推送视图控制器

如何在选项卡栏控制器中更新选项卡上的视图