触摸外部时在 UITableViewController 中隐藏 UIPickerView
Posted
技术标签:
【中文标题】触摸外部时在 UITableViewController 中隐藏 UIPickerView【英文标题】:Hide UIPickerView in UITableViewController while touch outside 【发布时间】:2011-06-09 21:20:51 【问题描述】:现在我的 UITableViewController 中有 2 个不同的 UIPickerView。我只在点击表格中的某些单元格时显示它们。我正在尝试做的是在我触摸拾取器外部时隐藏拾取器。是否有委托方法或类似的方法来实现这一点?我更喜欢将我的控制器保留为 UITableViewController 而不是简单的 UIViewController,因为我在其中一个单元格中有一个 textView,并且在 UIViewController 中显示键盘后滚动有点太多了。
提前致谢。
【问题讨论】:
所以我有完全相同的问题。我知道如何解决这个问题。我需要使用与隐藏键盘相同的概念,将 UIView 更改为 UIcontrol 以检测对它的触摸。对于 pickerView 来说,编码它是一件很痛苦的事情,因为它后面有一张桌子。我只是在顶部放了一个完成按钮,并为 IBAction 使用 [resignFirstResponder]。 【参考方案1】:一种可能的解决方案是,当点击特定单元格并处理选择器(以显示选择器)时,您可以在 tableview 上插入一个称为 MASK View 的视图。 (使用 Frame 作为 self.tableview.frame - yourPicker.frame.size.height )。现在,当您点击此视图时,您可以按如下方式处理它
-(void)showMaskView
if (!viewMaskView)
CGRect viewRect = CGRectMake(0, 0, self.tableView.frame.size.width, self.tableView.frame.size.height - yourPicker.frame.size.height);
viewMaskView = [[MaskView alloc] initWithFrame:viewRect];
viewMaskView.delegate = self;
[self.view addSubview:viewMaskView];
[self.view bringSubviewToFront:viewMaskView];
-(void)removeMaskView
if (viewMaskView)
[viewMaskView removeFromSuperview];
//Remove the Picker
在 MaskView 类中,您可以按如下方式处理触摸
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
if(self.delegate && [self.delegate respondsToSelector:@selector(removeMaskView)])
[self.delegate removeMaskView];
您可以在图像中的 Picker 上看到彩色蒙版视图。当点击它删除选择器。
【讨论】:
以上是关于触摸外部时在 UITableViewController 中隐藏 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3 触摸时在 Webview 中获取 pdf 的实际坐标
Swift 5:如何在点击/触摸坐标时在 GoogleMap 上添加标记?