Iphone 触摸外部时在UITableViewController中隐藏UIPickerView

Iphone 触摸外部时在UITableViewController中隐藏UIPickerView,iphone,uitableview,uipickerview,Iphone,Uitableview,Uipickerview,现在我的UITableViewController中有两个不同的UIPickerView。我只在点击表格中的某些单元格时显示它们。我想做的是,每当我接触到采摘器外面时,就把采摘器藏起来。是否有委托方法或类似的方法来实现这一点?我更喜欢将我的控制器作为UITableViewController而不是简单的UIViewController,因为我在其中一个单元格中有一个textView,在键盘显示后滚动在UIViewController中有点太多了 提前感谢。一个可能的解决方案是,当点击特定单元格并

现在我的UITableViewController中有两个不同的UIPickerView。我只在点击表格中的某些单元格时显示它们。我想做的是,每当我接触到采摘器外面时,就把采摘器藏起来。是否有委托方法或类似的方法来实现这一点?我更喜欢将我的控制器作为UITableViewController而不是简单的UIViewController,因为我在其中一个单元格中有一个textView,在键盘显示后滚动在UIViewController中有点太多了


提前感谢。

一个可能的解决方案是,当点击特定单元格并处理选择器(以显示选择器)时,您可以在tableview上插入一个称为“遮罩视图”的视图。(框架为self.tableview.Frame-您的picker.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
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if(self.delegate && [self.delegate respondsToSelector:@selector(removeMaskView)])
        [self.delegate removeMaskView];
}
在MaskView类中,可以按如下方式处理触摸

-(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
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if(self.delegate && [self.delegate respondsToSelector:@selector(removeMaskView)])
        [self.delegate removeMaskView];
}
您可以在图像中看到选择器上方的彩色遮罩视图。轻敲时,它将移除选择器。

所以我也有同样的问题。我知道如何解决这个问题。我需要使用与隐藏键盘相同的概念,通过将UIView更改为UIcontrol来检测键盘上的触摸。对于pickerView来说,编写代码是件痛苦的事,因为它后面有一张桌子。我只是在上面放了一个“完成”按钮,然后使用[resignFirstResponder]进行iAction。