UIView внутри другого UIView не вызывает методы - PullRequest
0 голосов
/ 08 июня 2009

У меня следующая проблема: UIView с UIViewController, но у меня есть другое представление, что-то вроде настраиваемой клавиатуры, и с этой «клавиатурой» связан еще один 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 (ссылка на скачивание) Я очень благодарен за любую помощь. ТНХ

Ответы [ 3 ]

1 голос
/ 08 июня 2009

Вы отпускаете контроллер вида. Что-то должно держаться за это.

0 голосов
/ 13 января 2010

Вы должны всегда помнить, что, согласно Apple, когда вы используете alloc, retain, copy .. Вы несете ответственность за этот объект. Ваш код кажется правильным, но он должен немного отличаться, вы создаете свой объект и обновляете его, но вам понадобится этот объект в вашем коде.

Кажется, вы выпускаете свой экземпляр контроллера keyborad view, Мое предложение о том, что вы должны создать свойство области видимости класса, и вы можете добавить экземпляр контроллера представления клавиатуры к этому свойству перед его выпуском, он вам понадобится

Я изменил вам пример кода следующим образом.

например

@ synthisize customKeyboard;

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

Должно быть работает с этими изменениями.

0 голосов
/ 08 июня 2009

Я вижу две вещи. Во-первых, вы действительно используете пользовательский пакет? Я обычно видел, что здесь пропущен ноль, особенно для простых приложений (как вы описываете это). Во-вторых, не добавляйте подпредставление, пока вы не закончите со всеми настройками Представления.

Попробуйте это:

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

Вы можете безопасно выпускать настроенный экземпляр , если вы успешно добавили его в стек родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...