是。我有一个名为UIViewController
的NavigatorViewController
。这是一个自定义的导航结构,其中包含不同的“插槽”,我可以在其中添加内容并在它们之间滑动—这对于实际的问题并不重要,但只要您获得代码即可。
在NavigatorViewController
中添加“插槽”数字4,如下所示:
slot4 = [self.storyboard instantiateViewControllerWithIdentifier:@"view4"];
slot4.view.frame = CGRectMake(screenWidth*2, 0.0, screenWidth, screenHeight);
[self.view addSubview:slot4.view];
效果很好。我在正确的位置看到在情节提要中添加的
UIViewController
(view4
)。在这个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;
在
ChatViewController
的viewDidLoad
方法中。但是,当我运行该项目并单击
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];