从手动加载的viewcontroller按下按钮时iOS崩溃

时间:2015-09-24 13:51:43

标签: objective-c uiviewcontroller xib xcode-storyboard

我以编程方式从xib实例化UIViewController,将其作为子VC添加到现有主视图,然后将子VC的视图(包含按钮)添加到我的主视图中。带按钮的视图显示得很好,但是当我按下按钮时,应用程序崩溃了一个"无法识别的选择器"信息。

我通过创建UIViewController的自定义子类(File - New - Cocoa Touch类,选择UIViewController的子类,并要求Xcode也生成XIB文件)来创建XIB。然后我在该XIB上放置了一个按钮,并将其连接到新创建的UIViewController子类。 XIB文件的所有者设置为新类的名称。

因此,我认为ButtonPushed操作消息不会发送到我的自定义UIVC,而是转向通用UIViewController - 它正确地理解ButtonPushed消息。

如何确保按下按钮时发送的操作消息实际上转到我的自定义UIViewController?

这是主视图的awakeFromNib方法中的代码(主视图来自Main.storyboard):

UIViewController *vc2 = [[UIViewController alloc] initWithNibName:@"ButtonVC" bundle:nil];

vc2.view.frame = CGRectMake(90, 140, 50, 200); //dont obscure the main view completely.

[self addChildViewController:vc2];
[self.view addSubview:vc2.view];  //vc2.view has a button, which shows up fine

[vc2 didMoveToParentViewController:self];

我通过按钮创建故事板并以编程方式加载,然后实例化我的buttonViewController,将其作为子VC添加到我的主视图中,设法获得了相同的功能。这样做很好,但在我看来,我应该能够用#34;只有#34;一个XIB。

1 个答案:

答案 0 :(得分:2)

试试这个:

UIViewController *vc2 = [[ButtonVC alloc] initWithNibName:@"ButtonVC" bundle:nil];

并确保正确设置视图控制器的xib中的类(see my answer here