Добавление UIView раскадровки в массив

Я ослеп в Google и не смог найти то, что ищу. Я новичок в XCode и Objective-C, но продвигаюсь довольно быстро... однако...

Если я использую раскадровки в приложении singleView и вручную добавляю UIViews в эту раскадровку (скажем, представляя изображения, которые я собираюсь перетаскивать), как мне получить эти UIViews в массив, чтобы я мог прокручивать их программно? Теперь я смог создать подвиды с помощью кода, а затем добавить их в массив просто отлично, но если я сначала создам подпредставления в раскадровке (что упрощает разработку общего макета), а затем попытаюсь добавить эти UIViews раскадровки к массиву, этот массив оказывается пустым с позициями X и Y, равными 0.

Мое первое предположение состоит в том, что экземпляры UIViews, созданные в раскадровке, не создаются во время выполнения ViewDidLoad (где я пытаюсь заполнить массив), но я не уверен. Моя цель - иметь возможность размещать эти UIViews в соответствующих местах визуально из макета раскадровки, а затем добавлять эти UIViews в массив во время запуска приложения, сохраняя их начальные местоположения на экране и т. д.

//

Хорошо, благодаря ссылке Эндрю на IBOutletCollections, я, наконец, получил свои UIViews, хранящиеся в массиве при запуске приложения, однако их представленные местоположения кадров NSLog'ируются в {0,0} в консоли, хотя они находятся в другом месте на раскадровке. . У меня есть метод Init, вызываемый из 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}}

Предложения? Как мне взаимодействовать с этим массивом и получать правильные местоположения кадров? Еще раз большое спасибо Андрею за то, что указал мне правильное направление!


person pscarnegie    schedule 14.02.2013    source источник


Ответы (1)


Вы должны иметь возможность сделать это, используя IBOutletCollection< /а>. Здесь есть короткий пост, объясняющий это: http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

Что касается сохранения начального местоположения представлений, вам нужно будет сделать это самостоятельно, перебирая представления в массиве коллекции выходов, вероятно, в -viewDidLoad, и где-то сохраняя кадр каждого представления.

person Andrew Madsen    schedule 14.02.2013
comment
Андрей, классное предложение! Спасибо тебе за это. Я никогда не знал об IBOutletCollections. - person pscarnegie; 15.02.2013