2013-04-11 79 views
0

我想顯示UIViewControllerMyViewController通過點擊UICollectionViewCell然後關閉它。UIButton的IBAction錯誤

所以,在我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

編輯:感謝calampunay and Manohar

問題已解決。但我已經更換兩個addSubviewremoveFromSuperview到AppDelagate,其中宣佈MyViewController作爲屬性。原因是 - 我想關閉MyViewController即使我會跳轉到其他選項卡(我的TabBar在我的應用程序中)或其他東西。

這會更好,如果MyViewController將關閉,即使我在其他地方(不在其框架中)點擊。

+0

你的對象被釋放,我猜。檢查強或保留。 – 2013-04-11 06:45:20

+0

[self.view removeFromSuperview];你的刪除..然後掃管笏將被刪除..你知道嗎? – 2013-04-11 06:57:08

回答

0

申報.h文件中

MyViewController *myController; 

在.M

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 2013-04-11 06:52:13

+0

試試編輯答案 – 2013-04-11 07:15:01

+0

謝謝!看到我編輯的問題 – Romowski 2013-04-11 07:56:24

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 2013-04-11 07:56:51