0

我正在尝试将NameSubViewfromNameSubViewController用作MainViewController. 我完成了这项工作,但我也想访问UITextField子视图的,如下所示:

主视图控制器.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为接口制作类

  • 为 IB 视图制作NameSubView类,将视图设置为此类 Identity Inspector

  • @property (nonatomic, strong) IBOutlet UITextField *textField;在 IB 中创建NameSubView并连接到文本字段。


然后我可以加载子视图,但我无法从MainViewController. 因此,为了访问它,我确实在身份检查器中将文件所有者的类NameSubViewController更改为。NameSubView

现在NameSubViewController访问了,但没有找到视图的属性,所以应用程序崩溃了。我不知道我是否遵循正确的程序,我现在可以为NameSubViewin创建一个属性NameSubViewController吗?还是我应该遵循另一个程序?

4

2 回答 2

1
  • NameSubViewController在身份检查器中将文件 返回给文件的所有者。
  • 添加NameSubView到身份检查器中的视图。

然后使用此代码:

#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,并确保所有内容都在 nib 中正确连接。最后,将nameController变量声明为类型NameSubViewController而不是 UIViewController。然后你应该能够得到文本字段nameController.textField

于 2012-08-29T20:19:29.767 回答