私のアプリケーションでは、既存のすべてのサブビューを削除し、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を見ることができました。
これは、self.viewも接続されている場合にのみ動作します。ビュー2を表示するために接続していない場合はどうなりますか? IBOutletに全く同じ方法で接続できない複雑なxibがあるので、この演習を試しています。だから、私はよりシンプルなUIViewを試して問題を再現しようとしました。なぜview2に接続できないのか分かったら、複雑なxibをデバッグすることになります。 – SmallChess
xibからロードする代わりにコードでビューを作成することができます。 xibからロードされたすべてのUIスタッフは、最初はawakeFromNibメソッドで利用可能になります。ところで、データ・モデルをビュー・コントローラに渡して、コントローラ自体のビューを(viewDidLoadで)構成する方が一般的です。手でxibをロードすることもできます。loadNibNamed:owner:options:を使用し、結果の配列からオブジェクトを抽出します。 – Felix