将Storyboard UIViews添加到数组中

时间:2013-02-14 17:14:20

标签: objective-c xcode arrays uiimageview xcode-storyboard

我已经谷歌自己失明了,无法找到我正在寻找的东西。我是XCode和Objective-C的新手,但进展很快......但是......

如果我在单一视图应用程序上使用Storyboard,并且我手动将UIViews添加到该Storyboard(比如说代表我将要拖放的图像),我如何将这些UIViews添加到数组中我可以通过编程方式循环它们吗?现在,我已经能够通过代码创建子视图,然后将它们添加到数组中,但是如果我首先在Storyboard中创建子视图(这简化了设计整体布局),然后我尝试添加那些Storyboard UIViews对于一个数组,该数组在X& Y位置为0。

我的第一个假设是在Storyboard中创建的UIViews的实例在ViewDidLoad执行时没有被实例化(我正在尝试填充数组),但我不确定。我的目标是能够从Storyboard布局直观地将这些UIView放置在各自的位置,然后在应用程序启动期间将这些UIViews添加到阵列,在屏幕上保存它们的起始位置等。

//

好的,感谢Andrew对IBOutletCollections的引用,我终于将我的UIViews存储在App启动的Array中,但是他们代表的帧位置在控制台中是NSLog'ing到{0,0},即使它们在别处在故事板上。我从ViewDidLoad调用了一个Init方法,如下所示:

- (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}}

连连呢?如何通过该数组进行交互并获得正确的帧位置?非常感谢安德鲁指出我正确的方向!

1 个答案:

答案 0 :(得分:1)

您应该可以使用IBOutletCollection执行此操作。这里有一篇简短的帖子解释:http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

至于保存视图的起始位置,您需要自己通过在-viewDidLoad中迭代插座集合数组中的视图,并将每个视图的框架存储在某处来实现。