我使用Interface Builder创建了一堆UI元素,并使用IBOutlets将它们连接到我的ViewController。
但是,当我尝试在ViewController的self.view.subviews
方法中迭代viewDidLoad
时,我发现子视图数组为空。
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
处的调试器输出:
(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>>
当UIButtons等已经初始化并正确连接到IBOutlets时,为什么self.views.subviews为空的任何想法都是空的?
编辑1:我将“MainView.xib”重命名为“ViewController.xib”并删除了loadView
中的ViewController.m
实现,我仍然看到相同的self.view.subviews
行为
答案 0 :(得分:4)
尝试在
中执行此操作- (void)viewDidLayoutSubviews{
}
加载所有子视图后调用此方法。希望这会对你有所帮助:)。
答案 1 :(得分:0)
我认为它可能与您加载视图的方式有关。 在viewControllers上,如果您的笔尖和您的VC在IB上正确链接,则无需使用loadView或NSBundle来加载。
此外,如果您将nib命名为ViewController,指定的init将为您正确加载它。 如果使用loadView,则必须自己加载所有视图树,而不仅仅是主视图。
请参阅链接:iPhone SDK: what is the difference between loadView and viewDidLoad?
答案 2 :(得分:0)
如果您将设置代码移至viewWillAppear
?