0

我想通过点击显示UIViewController MyViewControllerUICollectionViewCell然后关闭它。

所以,在我的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];
}

但是当我点击按钮时,我有这个而不是关闭方法调用:

在此处输入图像描述

编辑:感谢calampunayManohar

问题解决了。但是我已将addSubviewremoveFromSuperview都替换为 AppDelagate,其中将MyViewController声明为属性。原因是 - 我想关闭MyViewController即使我会跳转到其他选项卡(我的应用程序中有 TabBar)或其他东西。

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

4

2 回答 2

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

于 2013-04-11T07:04:21.480 回答
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];
}
于 2013-04-11T06:48:27.360 回答