Ios 无法删除子视图控制器
我正在尝试在函数Ios 无法删除子视图控制器,ios,objective-c,Ios,Objective C,我正在尝试在函数didselectrowatinexpath中添加子视图控制器。但是我无法删除我添加的这个子视图控制器。这就是我尝试过的: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWit
didselectrowatinexpath
中添加子视图控制器。但是我无法删除我添加的这个子视图控制器。这就是我尝试过的:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
if(isMenuExpanded==NO){
isMenuExpanded=YES;
middleVC.view.hidden=FALSE;
[middleVC.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self addChildViewController:middleVC];
[self.view addSubview:middleVC.view];
[middleVC didMoveToParentViewController:self];
[UIView animateWithDuration:0.3 animations:^{
[middleVC.view setFrame:CGRectMake(38, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
}else{
isMenuExpanded=NO;
//here i am trying to remove the child view controller
middleVC.view.hidden=TRUE;
[middleVC willMoveToParentViewController:nil];
[middleVC.view removeFromSuperview];
[middleVC removeFromParentViewController];
}
}
我还尝试隐藏视图控制器。您无法隐藏它,因为您每次单击单元格时都在创建一个新的
MiddleViewController实例
您需要做的是全局声明MiddleViewController*middleVC
(您可以在类的.h文件中声明)-
在您的didSelect
方法中-替换此行-
MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
根据本守则—
if(middleVC == nil) {
middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
}
您不能隐藏它,因为每次单击单元格时,您都在创建一个新的MiddleViewController
实例
您需要做的是全局声明MiddleViewController*middleVC
(您可以在类的.h文件中声明)-
在您的didSelect
方法中-替换此行-
MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
根据本守则—
if(middleVC == nil) {
middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
}
在我看来,当点击发生时,您试图切换“菜单视图”(middleVC),但为什么每次都要创建一个新实例?我看到的是,您试图隐藏尚未添加到视图中的内容
如果我是你,我会将实例化部分从didSelectRowAtIndexPath中取出(以查看DIDLOAD或其他内容),并保留引用。在我看来,当点击发生时,你试图切换“菜单视图”(middleVC),但为什么每次都要创建新实例?我看到的是,您试图隐藏尚未添加到视图中的内容
如果我是你,我会将实例化部分从didSelectRowAtIndexPath中取出(以查看didload或其他内容),并保留引用。请查找更改,您也可以这样做
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
if(isMenuExpanded==NO)
{
isMenuExpanded=YES;
middleVC.view.hidden=FALSE;
[middleVC.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
**middleVC.view.tag=8010;**
[self addChildViewController:middleVC];
[self.view addSubview:middleVC.view];
[middleVC didMoveToParentViewController:self];
[UIView animateWithDuration:0.3 animations:^{
[middleVC.view setFrame:CGRectMake(38, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
}
else
{
isMenuExpanded=NO;
**for(UIView *view in [self.view subviews])
{
if(view.tag == 8010)
[view removeFromSuperview];
}**
}
请找到变化,你也可以这样做
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MiddleViewController *middleVC =[self.storyboard instantiateViewControllerWithIdentifier:@"MiddleViewController"];
if(isMenuExpanded==NO)
{
isMenuExpanded=YES;
middleVC.view.hidden=FALSE;
[middleVC.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)];
**middleVC.view.tag=8010;**
[self addChildViewController:middleVC];
[self.view addSubview:middleVC.view];
[middleVC didMoveToParentViewController:self];
[UIView animateWithDuration:0.3 animations:^{
[middleVC.view setFrame:CGRectMake(38, 0, self.view.frame.size.width, self.view.frame.size.height)];
}];
}
else
{
isMenuExpanded=NO;
**for(UIView *view in [self.view subviews])
{
if(view.tag == 8010)
[view removeFromSuperview];
}**
}
你在改变观点吗?使用容器或viewController?我正在设置此子视图控制器本身的动画。是否切换某些视图?使用容器或viewController?我正在制作这个子视图控制器本身的动画。谢谢@jenis应该知道这一点。谢谢@jenis应该知道这一点。