Вызов метода View из его собственного View Controller, не работает - PullRequest
0 голосов
/ 20 ноября 2010

У меня есть View Controller, вызывающий метод в своем собственном представлении с именем closeMenu.closeMenu, как показано ниже, удаляет вызываемое меню UIImageView из superView и устанавливает его равным nil.Метод работает, когда вызывается из представления, но не при вызове из контроллера представления

При вызове метода контроллер представления видит UIImageView 'menu' как nil, даже если оно существует.

Любые идеи о том, как дать контроллеру представления возможность удалять меню из суперпредставления и устанавливать его равным нулю?

Контроллер представления:

     loadview {
        View *mainView = [[View alloc] initWithFrame:CGRectMake(0,0,320,480)];
        self.view = mainView;
        [mainView release];
     }

//Call closeMenu in View
[(View *)self.view closeMenu];

Представление:

menu = [[UIImageView alloc] initWithImage:image];
[self addSubview:menu];

-(void)closeMenu {
     NSLog(@"%@", menu);    //Displays: (null), only when called by controller
     if( menu != nil) {
           [menu removeFromSuperview];
           self.menu = nil;
     }
 }

Когда я создаю экземпляр кнопки в представлении с действием, направленным на метод closeMenu, он работает просто отлично.

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Является ли menu розеткой? Если да, то подключен ли он в IB? Вы загрузили перо, где он подключен?

Если нет, то куда вы его назначаете? Контроллер отображает свое меню? Если это так, это уже произошло? Если представление создает или загружает свое собственное представление меню, имеет ли , что еще не произошло, если вообще?

1 голос
/ 21 ноября 2010

Будьте уверены, что «откуда» вы звоните -closeMenu, не имеет никакого значения.Если ваш лог-оператор печатает ноль, тогда ваша переменная меню равна нулю.Это не значит, что у вас нет «открытого» экземпляра - просто ваша переменная меню не указывает на него.

Вам потребуется опубликовать еще немного кода, чтобы кто-нибудь мог понять, почему это так.происходит, когда у вас есть ошибка в другом месте вашего кода.

...