gpt4 book ai didi

ios - UITabBarController 子类从不调用 setViewControllers : or setViewControllers:animated:

转载 作者:行者123 更新时间:2023-12-01 17:40:44 26 4
gpt4 key购买 nike

我有一个简单的问题:我的自定义 UITabBarController子类同时覆盖 setViewControllers:setViewControllers:animated: .在 Storyboard 中使用我的子类时,不会调用任何方法。为什么? viewControllers 怎么样属性被设置?我可以以某种方式进入它们被设置的那一刻吗?

我的代码:

MyTabBarController.h

#import <UIKit/UIKit.h>

@interface MyTabBarController : UITabBarController <UITabBarControllerDelegate>
@end

MyTabBarController.m
#import "MyTabBarController.m"

@implementation MyTabBarController
- (void)viewDidLoad
{
NSLog(@"I do get called, and at this point I have viewControllers");
}

- (void)setViewControllers:(NSArray *)viewControllers
{
NSLog(@"in setViewControllers:");
[super setViewControllers:viewControllers];
}

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
{
NSLog(@"in setViewControllers:animated:");
[super setViewControllers:viewControllers animated:animated];
}
@end

注意:我知道我的子类正在被使用,因为 viewDidLoad被调用。

最佳答案

我同意@Duncan 的观点, Controller 由 initWithCoder 设置。 (或者更确切地说 loadView )。

基于该假设,不使用访问器的原因很明显:子类可以覆盖它们(并且可能忘记对 super 的调用或假设实例已完全初始化)。

尽管 Apple 没有给出建议,但您可以在 init 期间找到避免访问者的建议。在谷歌的Obj-C Styleguide (而且我相信我读到斯坦福的类(class)也建议这样做)。而且我非常怀疑 Apple 是否会编写代码来在初始化阶段发出 KVO 事件。

因此,除非您需要在添加 ViewController 之前对其进行操作,否则为什么不采用直接的解决方案呢?

- (id)initWithCoder:(NSCoder*)aDecoder 
{
if(self = [super initWithCoder:aDecoder])
{
[whateverYouWantToDoWithTheControllers:self.viewControllers];
}
return self;
}

- (void)setViewControllers:(NSArray *)viewControllers
{
[super setViewControllers:viewControllers];
[whateverYouWantToDoWithTheControllers:viewControllers];
}

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
{
[super setViewControllers:viewControllers animated:animated];
[whateverYouWantToDoWithTheControllers:viewControllers];
}

关于ios - UITabBarController 子类从不调用 setViewControllers : or setViewControllers:animated:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com