2013-04-11 4 views
0

Я хотел бы показать UIViewControllerMyViewController, нажав на UICollectionViewCell, а затем закройте его.Ошибка в IBAction UIButton

Итак, в моем didSelectItemAtIndexPath:

CGRect myFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
MyViewController *myController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
myController.view.frame = myFrame; 
[self.view addSubview:myController.view]; 

это работает!

В MyViewController У меня есть UIButton, который связан с:

- (IBAction)close:(id)sender { 
    [self.view removeFromSuperview]; 
} 

Но когда я нажимаю на кнопку у меня есть это вместо близко вызов метода:

enter image description here

EDIT: Спасибо calampunay и Manohar

Проблема решена. Но я заменил оба addSubview и removeFromSuperview в AppDelagate, в котором объявлено MyViewController как собственности. Причина в том, что я хочу закрыть MyViewController, даже если я перейду на другую вкладку (у меня есть TabBar в моем приложении) или что-то еще.

Было бы лучше, если MyViewController будет близок, даже если я коснусь другого места (а не его рамки).

+0

ваш объект выпущен, я думаю. проверьте наличие сильных или удержаний. –

+0

[self.view removeFromSuperview]; у тебя убираешь .. тогда ват будет удаляться .. ты знаешь? –

ответ

0

Объявите в файле .h

MyViewController *myController; 

в .м

myController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
myController.view.frame = myFrame; 
[self.view addSubview:myController.view]; 

- (IBAction)close:(id)sender 
{ 
    [myController.view removeFromSuperview]; 
} 
+0

не понимаю. ** addSubview ** находится в корневом контроллере, но ** removeFromSuperview ** находится в MyController. Где я должен объявить это? – Romowski

+0

попробуйте отредактированный ответ –

+0

Спасибо! См. Мой отредактированный вопрос – Romowski

0

в вас корень/родительский контроллер представления, объявить myController как собственность:

@property (strong, nonatomic) MyViewController *mycontroller; 

В вашем didSelectItemAtIndexPath, сделайте это вместо:

CGRect myFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
self.myController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
myController.view.frame = myFrame; 
[self.view addSubview:myController.view]; 

Проблема заключается в том, ваш myController уже выпущен, когда действие кнопки крана произошло, и он пытается вызвать метод close: к освобожденному объекту (myController).

+0

Спасибо! См. Мой отредактированный вопрос – Romowski

Смежные вопросы