2011-01-26 21 views
0

私のアプリケーションでは、既存のすべてのサブビューを削除し、Interface Builderで作成した新しいサブビューを追加しようとしています。しかし、私はビューを接続することができないようです。IBOutletの接続に関する問題

ボタンをクリックすると、次の関数は、(のUIViewControllerのサブクラス内で)実行されますInterface Builderの内部

// Display a list of settings to choose from 
- (void) settings 
{ 
    SettingsRootController *settingsController = [[SettingsRootController alloc] initWithNibName:@"SettingsRootController" bundle:nil]; 
    _settingsController = settingsController; 

    for (UIView *view in self.view.subviews) 
    { 
     [view removeFromSuperview]; 
    } 

    [self.view addSubview:_settingsController.view2]; 

    int a = [self.view.subviews count];  
    [self.view setNeedsDisplay]; 

    ...... 
} 


#import <UIKit/UIKit.h> 

@interface SettingsRootController : UIViewController 
{ 
    IBOutlet UIView *_view2; 
} 

@property(nonatomic, retain) IBOutlet UIView *view2; 

、私は、新しいビューベースのXIBを作成しました。ファイル所有者をSettingsRootControllerに設定します。 UITextViewを無作為にxibにドラッグします。 SettingsRootControllerでUITextViewを表示および表示2に接続します。

しかしながら、上記の行がある場合:

[self.view addSubview:_settingsController.view2]; 

常に0になり、したがって、新しいスクリーンは空です。

しかし、変化にいる場合:

[self.view addSubview:_settingsController.view]; 

私はUITextViewを見ることができました。

答えて

0

ビューコントローラを作成すると、そのビューは初期化時に作成されません。ビューは、ビュープロパティの最初のアクセス時に作成されます。それはなぜあなたが_settingsController.viewを使用すると動作するのですか?しかし、view2にアクセスすると、ビューはロードされません。

-(UIView*) view2 { 
    _view2 = self.view; 
    return _view2; 
} 
+0

これは、self.viewも接続されている場合にのみ動作します。ビュー2を表示するために接続していない場合はどうなりますか? IBOutletに全く同じ方法で接続できない複雑なxibがあるので、この演習を試しています。だから、私はよりシンプルなUIViewを試して問題を再現しようとしました。なぜview2に接続できないのか分かったら、複雑なxibをデバッグすることになります。 – SmallChess

+0

xibからロードする代わりにコードでビューを作成することができます。 xibからロードされたすべてのUIスタッフは、最初はawakeFromNibメソッドで利用可能になります。ところで、データ・モデルをビュー・コントローラに渡して、コントローラ自体のビューを(viewDidLoadで)構成する方が一般的です。手でxibをロードすることもできます。loadNibNamed:owner:options:を使用し、結果の配列からオブジェクトを抽出します。 – Felix

0

インスタンスのvar宣言は、プロパティ宣言と異なります。アンダースコアの有無にかかわらず。たぶん、それがうまくいかない理由です。

+0

あなたは次のようなカスタムゲッターメソッドを書くことができます:あなたは_view2とview2を意味しますか?私は@シンセシスview2 = _view2を置く。 – SmallChess

+0

シームレスです、私は新しい答えを書くでしょう – Felix

関連する問題