0

のサブビューとしてNameSubViewfromを使用しようとしています。私はそれを機能させましたが、次のようなサブビューにもアクセスしたいと思います:NameSubViewControllerMainViewControllerUITextField

MainViewController.m :

#import "NameSubViewController.h"

...

UIViewController *nameController = [[NameSubViewController alloc] initWithNibName:@"NameSubViewController" bundle:nil];
nameSubView = [nameController view];
[self.view addSubview:nameSubView];

NSString *textFieldString = nameSubView.textField.text;

しかし、私はそれを機能させるのに問題があります。これは、サブビューを作成するために私が行ったことです:

  • NameSubViewControllerインターフェイスはXIBでクラス化

  • IBNameSubViewビューのクラスを作成し、ビューをこのクラスに設定します Identity Inspector

  • で作成さ@property (nonatomic, strong) IBOutlet UITextField *textField;NameSubView、IB のテキスト フィールドに接続されます。


その後、サブビューをロードできますが、から textField にアクセスできませんでしたMainViewController。アクセスできるようにするために、Identity Inspector でFiles Owner のクラスを からNameSubViewControllerに変更しました。NameSubView

にアクセスできるようになりましNameSubViewControllerたが、ビューのプロパティが見つからないため、アプリがクラッシュします。正しい手順に従っているかどうかわかりませんが、NameSubViewinのプロパティを作成できNameSubViewControllerますか? それとも別の手続きをするべきですか?

4

2 に答える 2

1
  • NameSubViewControllerID インスペクタでファイルの所有者に戻します 。
  • NameSubViewID インスペクターのビューに を追加します。

次に、次のコードを使用します。

#import "NameSubViewController.h"
// If view's declaration is located in a separate file then the next line is important
#import "NameSubView.h" 

...

// It is better to declare the view controller as 'NameSubViewController'
NameSubViewController *nameController = [[NameSubViewController alloc] initWithNibName:@"NameSubViewController" bundle:nil];
// A casting to 'NameSubView' should do the main magic
NameSubView *nameSubView = (NameSubView *)[nameController view];
[self.view addSubview:nameSubView];

// It is better to ensure that the view is of a correct class 
// before using its specific properties
if ([nameSubView isKindOfClass:[NameSubView class]]) {
  // Now it should work 
  // (assuming that you have a property 'textField' in 'NameSubView')
  NSString *textFieldString = nameSubView.textField.text;
}
于 2012-08-29T20:17:12.010 に答える
1

まず、ファイルの所有者を に戻しますNameSubViewController。テキストフィールド IBOutlet 宣言を NameSubViewController に移動し、ペン先ですべてが適切に接続されていることを確認します。最後に、nameController変数がNameSubViewControllerUIViewController ではなくタイプであることを宣言します。その後、テキストフィールドを取得できるはずですnameController.textField

于 2012-08-29T20:19:29.767 に答える