我想通过点击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];
}
但是当我点击按钮时,我会使用此方法而不是关闭方法调用:
编辑:感谢 calampunay 和 Manohar
问题解决了。但我已将 addSubview 和 removeFromSuperview 替换为AppDelagate,其中将 MyViewController 声明为属性。原因是 - 我想关闭 MyViewController ,即使我会跳转到其他标签(我的应用程序中有TabBar)或其他内容。
如果 MyViewController 即使我在其他地方点击(不在它的框架中)也会更好。
答案 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)。