UIButton的IBAction出错

时间:2013-04-11 06:44:03

标签: ios uiviewcontroller addsubview

我想通过点击UIViewController然后关闭它来显示UICollectionViewCell MyViewController

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

问题解决了。但我已将 addSubview removeFromSuperview 替换为AppDelagate,其中将 MyViewController 声明为属性。原因是 - 我想关闭 MyViewController ,即使我会跳转到其他标签(我的应用程序中有TabBar)或其他内容。

如果 MyViewController 即使我在其他地方点击(不在它的框架中)也会更好。

2 个答案:

答案 0 :(得分:0)

在.h文件中声明

MyViewController *myController;

in .m

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

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

答案 1 :(得分:0)

在您的root /父视图控制器中,将myController声明为property:

@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)。