我有以下问题: 带有UIViewController的UIView,但我有另一个视图,类似于自定义键盘,而这个“键盘”还有另一个UIViewController关联。 我正在将这个键盘添加到原来的UIView中,就像那样
CustomizedKeyboard *customized = [[CustomizedKeyboard alloc] initWithNibName:@"CustomizedKeyboard" bundle:[NSBundle mainBundle]];
[self.view addSubview: customized.view];
customized.view.frame = CGRectMake(0, 480, 320, 260);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
customized.view.frame = CGRectMake(0, 200, 320, 260);
[UIView commitAnimations];
[customized release];
当我调用此方法时,视图在我的视图中显示没有问题,但问题是这个自定义键盘有一些与按钮相关的方法,但是当我触摸任何按钮时我得到了
- [NSCFType buttonPressed]:发送到实例的无法识别的选择器 0x1065f80'
任何人都知道它可能是什么? 我用这个问题创建了这个示例项目,以便更好地理解 http://www.2shared.com/file/6174665/9c9bbd44/ArchiveFixed.html(下载链接) 我真的很感激任何帮助。 THX
答案 0 :(得分:1)
您正在发布视图控制器。有些东西需要坚持下去。
答案 1 :(得分:0)
我看到两件事。首先,您真的使用自定义捆绑包吗?我一般都看到nil在这里传递,特别是对于简单的应用程序(正如你所描述的那样)。其次,在完成所有View的设置之前,请不要添加子视图。
试试这个:
CustomizedKeyboard *customized = [[CustomizedKeyboard alloc] initWithNibName:@"CustomizedKeyboard" bundle: nil];
customized.view.frame = CGRectMake(0, 480, 320, 260);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
customized.view.frame = CGRectMake(0, 200, 320, 260);
[UIView commitAnimations];
[self.view addSubview: customized.view];
[customized release];
只要您成功将其添加到父级堆栈中,您就可以安全地发布自定义实例。
答案 2 :(得分:0)
你应该记住,根据Apple的说法,当你使用alloc时,保留,复制.. 你是这个对象的负责任的生命。你的代码似乎是正确的,但它应该略有不同,你正在创建你的对象并重新启动它,但是你需要在你的代码中使用这个对象。
好像你正在发布你的keyborad视图控制器实例, 我建议您应该创建类范围属性,并且可以在释放它之前将键盘视图控制器实例添加到此属性,您将需要它。
我改变了你这样的示例代码。
例如
@synthisize customizeKeyboard;
CustomizedKeyboard *customized = [[CustomizedKeyboard alloc] initWithNibName:@"CustomizedKeyboard" bundle:[NSBundle mainBundle]];
self.customizedKeyboard = nil;
[self.customizedKeyboard release]; //prevent retain counts memory leaks
self.customizedKeyboard = customized;
[customized release];
[self.view addSubview: self.customizedKeyboard.view];
customized.view.frame = CGRectMake(0, 480, 320, 260);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
customized.view.frame = CGRectMake(0, 200, 320, 260);
[UIView commitAnimations];
它应该适用于这种变化。