将故事板UIViews添加到阵列

问题描述:

我已经Google'd自己失明,一直未能找到我要找的东西。我是XCode和Objective-C的新手,但进度相当快...但是...将故事板UIViews添加到阵列

如果我在单个应用程序上使用Storyboard,并且手动将UIView添加到该Storyboard(例如,表示图像,我要拖放),我如何将这些UIViews放到一个数组中,这样我就可以通过编程来循环它们了?现在,我已经能够通过代码创建子视图,然后将它们添加到Array中,但是如果我先在Storyboard内创建子视图(这简化了总体布局的设计),然后尝试添加这些Storyboard UIViews到一个阵列,该阵列空X & Y位置为0.

我的第一个假设是在Storyboard创建的UIViews的实例没有在ViewDidLoad被执行时实例化(我在哪里试图填充阵列),但我不确定。我的目标是能够在视觉上把这些UIViews它们的各自位置从故事板布局,然后添加这些UIViews到在应用程序启动的阵列,从而节省了屏幕的起始位置等

//

好的,感谢Andrew对IBOutletCollections的引用,我终于得到了我的UIViews存储在App启动时的数组,然而它们表示的框架位置是NSLog到控制台{0,0},即使它们在其他地方故事板。我有一个初始化方法从viewDidLoad中被调用,看起来像下面这样:

- (void)initialize { 

    dragViews = [NSArray arrayWithObjects: dragView1, dragView2, dragView3, nil]; 
    dragTargets = [NSArray arrayWithObjects: dragTarget1, dragTarget2, dragTarget3, nil]; 

    NSLog(@"arrayImages contains %d items. Contents = %@",[dragViews count], dragViews); 
    NSLog(@"arrayTarget contains %d items. Contents = %@",[dragTargets count], dragTargets); 

    int i; 
    int count = [dragViews count]; 
    for (i = 0; i < count; i++) { 
     UIView *currentView = [dragViews objectAtIndex:i]; 
     NSLog (@"My view's center is: %@\n", NSStringFromCGRect(currentView.frame)); 
    } 
} 

但我的控制台没有正确表示他们目前的位置:

2013-02-15 10:43:09.538 dragAssign[4869:11303] arrayImages contains 3 items. Contents = (
    "<UIImageView: 0x92066b0; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9206710>>", 
    "<UIImageView: 0x9006510; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9006570>>", 
    "<UIImageView: 0x90065a0; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9006600>>" 
) 
2013-02-15 10:43:09.545 dragAssign[4869:11303] arrayTarget contains 3 items. Contents = (
    "<UIView: 0x92062a0; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9206350>>", 
    "<UIView: 0x92055d0; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x92053a0>>", 
    "<UIView: 0x9206650; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x92057d0>>" 
) 
2013-02-15 10:43:09.546 dragAssign[4869:11303] My view's center is: {{0, 0}, {0, 0}} 
2013-02-15 10:43:09.546 dragAssign[4869:11303] My view's center is: {{0, 0}, {0, 0}} 
2013-02-15 10:43:09.547 dragAssign[4869:11303] My view's center is: {{0, 0}, {0, 0}} 

建议?我将如何通过该阵列进行交流并获得正确的框架位置?再次感谢Andrew为我指出正确的方向!

你应该可以使用IBOutletCollection来做到这一点。有一个简短的帖子在这里解释它:http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

至于保存视图的起始位置,您需要自己迭代在outlet collection数组中的视图,可能在-viewDidLoad,并将每个视图的框架存储在某处。

+0

安德鲁,真棒建议!谢谢你。我从来不知道IBOutletCollections。 – pscarnegie 2013-02-15 15:49:07