我正在使用 UIPickerView 让用户从几个选项中进行选择,当我显示选择器时,我滚动到最后一个选定的行。
当用户选择一行时,我希望始终关闭选择器(即使用户点击已选择的行),我也会在didSelectRow
方法中关闭选择器。
问题是,如果用户重新选择所选行,didSelectRow
则不会调用该方法,因此我无法关闭选择器。
我正在使用 UIPickerView 让用户从几个选项中进行选择,当我显示选择器时,我滚动到最后一个选定的行。
当用户选择一行时,我希望始终关闭选择器(即使用户点击已选择的行),我也会在didSelectRow
方法中关闭选择器。
问题是,如果用户重新选择所选行,didSelectRow
则不会调用该方法,因此我无法关闭选择器。
一种解决方案是创建 UIPickerView 的子类并覆盖该touchesEnded:withEvent:
方法:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
// dismiss the picker view here, either directly, or you could notifiy
// the delegate with a custom message:
if ([self.delegate respondsToSelector:@selector(pickerViewShouldDismiss:)]) {
[self.delegate pickerViewShouldDismiss:self];
}
}
或者你可以添加UITapGestureRecognizer
一个UIPickerView
:
UITapGestureRecognizer *tapGR = [UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(pickerViewTapped];
[pickerView addGestureRecognizer:tapGR];
进而:
- (void)pickerViewTapped {
// dismiss the picker.
}
UIPickerView
尽管这不会干扰处理水龙头的方式,但我不确定 100% 。