是。我有一个名为UIViewControllerNavigatorViewController。这是一个自定义的导航结构,其中包含不同的“插槽”,我可以在其中添加内容并在它们之间滑动—这对于实际的问题并不重要,但只要您获得代码即可。
NavigatorViewController中添加“插槽”数字4,如下所示:

slot4 = [self.storyboard instantiateViewControllerWithIdentifier:@"view4"];
slot4.view.frame = CGRectMake(screenWidth*2, 0.0, screenWidth, screenHeight);
[self.view addSubview:slot4.view];


效果很好。我在正确的位置看到在情节提要中添加的UIViewControllerview4)。

在这个slot4 UIViewController内部,我想添加另一个子视图。另一个名为ChatViewController的UIViewController。我添加这些行:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ChatViewController *viewController = (ChatViewController *)[storyboard instantiateViewControllerWithIdentifier:@"Chat"];
viewController.view.tag = 266;
[slot4.view addSubview:viewController.view];


到目前为止一切正常-它也可以正常工作。但..

我的问题是,在ChatViewController内部有一个名为chatTextView的UITextView。我已经设置了:

@interface ChatViewController : UIViewController <UITextViewDelegate> (...)


ChatViewController标头中,因为我想从chatTextView获取操作。太好了当chatTextView“成为firstResponder”时,它将调用某种动作。为此,我必须设置

chatTextView.delegate = self;


ChatViewControllerviewDidLoad方法中。

但是,当我运行该项目并单击chatTextView时,它崩溃了。
我收到一条错误消息:

Thread 1: EXC_BAD_ACCESS (code=1, address=0xXXXXXXXXX)


当我将chatTextView的委托设置为nil时,没有错误,但是我不能使用它:-)

请问我是否忘记了什么!

最佳答案

而不是仅将ChatViewController视图添加为子视图,请尝试以下操作,

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ChatViewController *viewController = (ChatViewController *)[storyboard instantiateViewControllerWithIdentifier:@"Chat"];
viewController.view.tag = 266;
[slot4 addChildViewController:viewController];
[slot4.view addSubview:viewController.view];
[viewController didMoveToParentViewController:slot4];


使用相同的方法添加slot4

slot4 = [self.storyboard instantiateViewControllerWithIdentifier:@"view4"];
slot4.view.frame = CGRectMake(screenWidth*2, 0.0, screenWidth, screenHeight);
[self addChildViewController:slot4];
[self.view addSubview:slot4.view];
[slot4 didMoveToParentViewController:self];

09-25 20:01