为什么self.view.subviews在viewDidLoad中是一个空的数组?
我使用Interface Builder创build了一堆UI元素,并使用IBOutlets将它们连接到我的ViewController。
但是,当我尝试在ViewController的viewDidLoad
方法中遍历self.view.subviews
时,发现子视图数组是空的。
-
ViewController.xib
:UIView | - UILabel - UIButton - // ... more stuff - UIToolbar
-
ViewController.m
:#import "ViewController.h" @interface ViewController () // Interface elements @property IBOutlet UILabel *titleLabel; @property IBOutlet UIButton *button1; // ... etc @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // BREAK_POINT // ... code to wire up the UIButtons to dynamically created objects }
-
BREAK_POINT
处的debugging器输出:(lldb) po self.view <UIView: 0x7fa7897e2140; frame = (0 0; 600 600); autoresize = W+H; layer = <CALayer: 0x7fa7897e2210>> (lldb) po self.view.subviews <__NSArrayI 0x7fa789713500>( ) (lldb) po [self.view.subviews count]; nil (lldb) po self.button1 <UIButton: 0x7fa78955ea70; frame = (-23 -15; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fa7897663d0>>
任何想法为什么self.views.subviews是空的,当明确的UIButtons等已经初始化并连接到IBOutlets正确?
编辑1:我将“MainView.xib”重命名为“ViewController.xib”,并删除了ViewController.m中的loadView
实现,我仍然看到相同的self.view.subviews
行为。
试着在那里做
- (void)viewDidLayoutSubviews{ }
加载所有子视图后调用此方法。 希望对你有帮助 :)
我相信这可能与您加载视图的方式有关。 在viewControllers上,如果你的笔尖和你的VC在IB上正确链接,那么就不需要使用loadView或者NSBundle来加载。
另外,如果您将您的笔尖命名为ViewController,则指定的init将为您正确加载它。 如果使用loadView,则必须自己加载所有的视图树,而不仅仅是主视图。
请参阅链接: iPhone SDK:loadView和viewDidLoad有什么区别?
如果您将您的设置代码移动到viewWillAppear
?