2012-10-29 27 views
0

简单:UITextView的委托方法不叫里面的子视图

在ClassA_VC我做的:

ClassB_VC *classB_VC=[ClassB_VC alloc]initWithNibName:@"ClassB_VC" bundle:nil]; 
[self.view addSubview:classB_VC.view]; 

然后在ClassB_VC我有一个的UITextField。我在IB中设置textfield和File的所有者之间的委托连接,我在@interface声明中添加,并像往常一样编写协议方法(textFieldDidEndEditing,textFieldDidBeginEditing等)。

这应该可以,但是当我触摸文本框时,我得到了一个异常。看起来textfield没有到达它的代表。

但是,如果我使用presentModalViewController呈现视图,一切工作正常。我宁愿不必这样做,因为这些视图是到一个tabViewController,我不想隐藏tabBar时显示。

我希望你明白我想说什么。我的英文不是很好。

+0

完整的异常消息会有帮助。由于UITextFieldDelegate的所有方法都是可选的,因此接口文件中的协议引用或拼写委托方法签名不应该是一个问题,它看起来更像是内存问题。 –

+0

好吧,就是这一点。没有消息,只是冻结。我得到的是线程1的轨迹显示了这些最后一行:0 objc_msgSend 1 - [UITextField canBecomeFirstResponder] 2- [UIResponder becomeFirstResponder] 3 - [UITextInteractionAssistant setFirstResponderIfNecessary]看起来添加的视图不是第一响应者。我试图在viewDidLoad中强制[self.view becomeFirstResponder],但仍然是一样的。如果我将UITextField从委托中解除链接,它不会崩溃,但我无法隐藏键盘等等。 – rmvz3

+0

您可能已在委托方法的某个位置创建了一个无限循环,请尝试对它们进行注释。如果问题仍然存在,则需要检查InterfaceBuilder连接,但不要让您将UITextField插座连接到其他类型插座,但您可能在创建连接后手动更改插座类。或者你是否在代码中手动设置了这个插座? –

回答

1

你保留ClassB_VC在ClassA_VC?

+0

是!这就是诀窍。看起来很明显......现在。 :D我不明白为什么会发生这种情况。视图不会被卸载,也不会从屏幕上移除。 :| – rmvz3

+0

谢谢大家的回答。 – rmvz3

+0

视图保留被添加到其他视图,第二个视图控制器,也是textView委托,不被任何东西保留。那么会发生什么是viewController被释放 - 它释放它的出口,但它们在视图的栈中保留它们,这就是视图**没有被解除分配,但视图控制器作为委托**被解除分配。当你将viewController的视图显示为模态时,控制器会被保留,控制器不会被释放。希望现在清楚。 –

0

从界面生成器中删除委托并做到这一点:

ClassB_VC *classB_VC=[ClassB_VC alloc]initWithNibName:@"ClassB_VC" bundle:nil]; 
[classB_VC.yourTextField setDelegate:classB_VC]; 
[self.view addSubview:classB_VC.view]; 

让我知道这是否有助于

+0

它没有工作。我以前已经遇到过这个问题,并且必须将ClassB中的视图和方法包含到ClassA中,并在需要时将其隐藏起来。这对我来说似乎非常混乱。处理这个问题一定是非常非常容易的,但是我错过了一些很明显的东西。 – rmvz3