删除子视图时如何修复触摸禁用?

Posted

技术标签:

【中文标题】删除子视图时如何修复触摸禁用?【英文标题】:How to fix touch disabled when removing subview? 【发布时间】:2016-12-25 01:55:29 【问题描述】:

我有主情节提要,它将情节提要中另一个 UIViewController 的视图作为子视图添加到它上,因为我想要一种使用计时器以模态方式呈现另一个视图的方法。

我可以添加子视图(从第二个 UIViewController 开始)但是当我点击关闭时,UIView 被删除但我无法点击任何地方。

显示第二个故事板视图:

 UIViewController* controller = [storyboard instantiateViewControllerWithIdentifier:@"MemberViewController"];

 [viewController addChildViewController:controller];

 controller.view.frame = controller.view.bounds;

 [viewController.view addSubview:controller.view];

 [controller didMoveToParentViewController:viewController];

隐藏子视图

+ (void)hideContentController: (UIViewController *) content

    [content willMoveToParentViewController:nil]; // 1
    [content.view removeFromSuperview]; // 2
    [content removeFromParentViewController]; // 3

以上两个代码块都在NSObject

我在第二个故事板视图中有一个关闭按钮,它是一个 UIViewController 类,一旦点击关闭按钮,它就会在 NSObject 文件中调用 hideContentController。

任何帮助将不胜感激。

【问题讨论】:

尝试在隐藏功能中注释第 1 行和第 3 行并尝试!只需删除 UIView 通常对我有用! 不幸的是没有工作.. 您尝试添加为子视图的UIViewController 是否有占据整个视图的UIGestureRecognizers 我没有添加任何 ui 手势识别器。 【参考方案1】:

你可以像下面这样实现它:

MemberViewController.h 中创建 IBOutlet @propertybtnClose 按钮

SecondViewController.m 类的实现中使用MemberViewController* controller 类变量:

//Write in your SecondViewController.m
controller = [storyboard instantiateViewControllerWithIdentifier:@"MemberViewController"];
 [controller.btnClose addTarget:self action:@selector(closeAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubView: controller.view];

//Close Action method
-(void)closeAction()

 [controller.view removeFromSuperView];

【讨论】:

我得到这个 'NSInvalidArgumentException',原因:'-[UINavigationController btnClose]: unrecognized selector sent to instance 0x11a08f000' 尝试解决这个问题..我看看这个。 不要从 btnClose 的情节提要中连接选择器 那么放在哪里呢? 我还要将成员情节提要中的 btn close 属性插座连接到按钮吗?

以上是关于删除子视图时如何修复触摸禁用?的主要内容,如果未能解决你的问题,请参考以下文章

触摸 UISearchbar 时如何修复偏移键盘

如何禁用增量修复?

调用触摸手势事件时如何检查其父视图或子视图?

在子视图之外触摸时删除子视图

如何修复视图居中之谜?

如何修复路由以在 node.js 的子文件夹中查找视图