【问题标题】:Hide UIPickerView in UITableViewController while touch outside触摸外部时在 UITableViewController 中隐藏 UIPickerView
【发布时间】:2011-06-09 21:20:51
【问题描述】:

现在我的 UITableViewController 中有 2 个不同的 UIPickerView。我只在点击表格中的某些单元格时显示它们。我正在尝试做的是在我触摸拾取器外部时隐藏拾取器。是否有委托方法或类似的方法来实现这一点?我更喜欢将我的控制器保留为 UITableViewController 而不是简单的 UIViewController,因为我在其中一个单元格中有一个 textView,并且在 UIViewController 中显示键盘后滚动有点太多了。

提前致谢。

【问题讨论】:

  • 所以我有完全相同的问题。我知道如何解决这个问题。我需要使用与隐藏键盘相同的概念,将 UIView 更改为 UIcontrol 以检测对它的触摸。对于 pickerView 来说,编码它是一件很痛苦的事情,因为它后面有一张桌子。我只是在顶部放了一个完成按钮,并为 IBAction 使用 [resignFirstResponder]。

标签: iphone uitableview uipickerview


【解决方案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 上看到彩色蒙版视图。当点击它删除选择器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2014-04-07
    相关资源
    最近更新 更多