0

のようなことをしたいUITabBarController。IBのインスタンスを追加できるUITabBarControllerプロパティがあります。私は自分のVCで同じことを考えようとしています:viewControllersUIViewController *

@property (nonatomic, copy) IBOutletCollection(UIViewController) NSArray *viewControllers;

しかし、これは機能しません。それは私たちにも可能ですか?

編集1。

Ramshad は適切なサンプルを投稿しましたが、XIB を使用しています。ストーリーボードを使って実現したいと思います。

EDIT 2.-報奨金の価値の終わりに...

それが機能する場合に備えて、vaderkvarnの投稿に質問UITabBarControllerします。また、Ramshad が投稿したように、NIB で可能です。これまでのところ、dasblinkenlight の投稿が最も正しいですが、質問には答えていません。この質問を開いたままにしておくのは、それが私たちにとって制限されているかどうか、またはその方法が何であるかを明らかにするためです.

PS: なぜこれらの反対票を投じるのですか?

4

3 に答える 3

2

UIViewControllersをsに接続できるようには見えませんがIBOutletCollection(またはそれらの使用に課せられた制限が多すぎる)、ストーリーボードを使用するときに機能する簡単な解決策があります。このコードはあなたのviewDidLoadメソッドに入ります:

_viewControllers = [NSArray arrayWithObjects: 
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller1"]
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller2"]
,   [self.storyboard instantiateViewControllerWithIdentifier:@"Controller3"]
,   nil];
于 2012-12-11T17:17:27.260 に答える
2

The reason why the outlet collection solution does not work is that a View Controller is not an outlet. From the documentation:

An outlet is a property that is annotated with the symbol IBOutlet and whose value you can set graphically in a nib file or a storyboard.

A view controller is not a graphical object.

If you want to use an IBOutletCollection, you should only use one view controller, and put the views in the collection.

But if you want one controller for every view, you need to go for a more programmatic approach. An array with view controllers might be a good start, but I couldn't say as I don't know what you want to do with them.

Edit:

To be more clear as you don't seem to catch my point:

No, it does not has to be a way. A Storyboard is not an API, it is a graphical tool for drawing scenes and segues. It is specially designed for things like Tab Bar based apps.

If you right click on your Storyboard file and choose open as -> Source Code, you will see that a Tab Bar Controller have special elements that other View Controllers do not have. To mess around with the XML in a Storyboard file is beyond me.

If you want to go with Nib files, use Ramshads answer.

If you want to get as close as possible with storyboards, go with dasblinkenlights answer.

But the answer to your question (as far as I know) is NO, there is no way to accomplish this with storyboards. If it were, it would have been documented, which it is not.

于 2012-12-09T14:18:46.293 に答える
1

を使用して要件を満たし UISegmentedControl + IBOutletCollection + presentViewControllerました。

必要に応じてではなく、任意のコントロールを使用できUISegmentedControlます。

UIViewControllers私は3つの異なるものを追加しXibViewController1,2,3.

また、2つのメソッドを追加しました。1つは対応するビューを表示するためのもので、もう1つは以前に入力されたビューを閉じるためのものです。

Xib以下の設定スクリーンショットを添付しました。

3つではなく1つだけUIViewControllerを使用して、いくつかのロジックで再利用できます:)

方法は次のとおりです。

@property (strong, nonatomic) IBOutletCollection(UIViewController) NSArray *ViewCollection;

//dismissing the earlier populated view
- (IBAction)dismiss:(id)sender {

    [self dismissViewControllerAnimated:YES completion:nil];
}


//presenting the corresponding view.
- (IBAction)resetAction:(id)sender {      

    UISegmentedControl *mySegment = (UISegmentedControl *)sender;

    int index = 0;          
    for (UIViewController *viewItem in _ViewCollection) {

        if (index == mySegment.selectedSegmentIndex) {

            [self presentViewController:viewItem animated:YES completion:nil];
        }
        index++;
    }
}

私のサンプルアプリケーションはここからダウンロードできます

Xib設定のスクリーンショット

ここに画像の説明を入力してください

于 2012-12-10T10:03:49.470 に答える