触摸外部时在 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的主要内容,如果未能解决你的问题,请参考以下文章

使用多个视图/布局时在 Android 中处理触摸事件

使用 Swift 3 触摸时在 Webview 中获取 pdf 的实际坐标

Swift 5:如何在点击/触摸坐标时在 GoogleMap 上添加标记?

允许 DialogFragment 的外部触摸

运行外部文件时在 ipython qtconsole 中进行 LaTeX 打印

在使用外部调试器时在 VS2013 中使用 NatVis 文件