1

私は自分自身を盲目にしていて、探しているものを見つけることができませんでした。私はXCodeとObjective-Cを初めて使用しますが、非常に速く進歩しています...しかし...

シングルビューアプリケーションでストーリーボードを使用していて、そのストーリーボードにUIViewを手動で追加する場合(たとえば、ドラッグアンドドロップする画像を表す)、これらのUIViewを配列に取得して次のことができるようにするにはどうすればよいですか?プログラムでそれらをループしますか?これで、コードを使用してサブビューを作成し、それらを配列に追加することができましたが、最初にストーリーボード内にサブビューを作成すると(全体的なレイアウトの設計が簡単になります)、次にそれらのストーリーボードUIViewを追加しようとします配列に対して、その配列はXとYの位置が0の場合は空になります。

私の最初の仮定は、ストーリーボードで作成されたUIViewのインスタンスは、ViewDidLoadが実行されたとき(配列にデータを入力しようとしているとき)にインスタンス化されないということですが、よくわかりません。私の目標は、ストーリーボードレイアウトから視覚的にそれらのUIViewをそれぞれの場所に配置し、アプリケーションの起動時にそれらのUIViewを配列に追加したり、画面上の開始位置を保存したりできるようにすることです。

//

AndrewがIBOutletCollectionsを参照したおかげで、アプリの起動時にUIViewが配列に格納されるようになりましたが、ストーリーボード上の他の場所にあるにもかかわらず、表示されるフレームの場所はコンソールで{0,0}にNSLogアウトされます。 。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}}

提案?その配列をどのように相互作用して、正しいフレーム位置を取得しますか?私を正しい方向に向けてくれたアンドリューに改めて感謝します!

4

1 に答える 1

1

IBOutletCollectionを使用してこれを実行できるはずです。ここにそれを説明する短い投稿があります:http ://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

-viewDidLoadビューの開始位置を保存する場合は、おそらく内のアウトレットコレクション配列内のビューを繰り返し処理し、各ビューのフレームをどこかに保存することによって、自分で保存する必要があります。

于 2013-02-14T17:17:17.013 に答える