另一个UIView里面的UIView没有调用方法

时间:2009-06-08 04:49:10

标签: iphone objective-c cocoa-touch

我有以下问题: 带有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

3 个答案:

答案 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];

它应该适用于这种变化。