当scrollview userInteraction Disabled时pickerview隐藏

Posted

技术标签:

【中文标题】当scrollview userInteraction Disabled时pickerview隐藏【英文标题】:pickerview hidden when scrollview userInteraction Disabled 【发布时间】:2018-10-16 10:49:04 【问题描述】:

我的功能是在点击 textField 时打开选择器。我的文本字段在滚动视图内,如下图所示。

我想在选择器打开时禁用滚动视图的用户交互。以下是我的代码。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField


    [self.picker removeFromSuperview];
    [self.toolBar removeFromSuperview];
    textField.inputView = self.picker;
    textField.inputAccessoryView = self.toolBar;
    self.scrollview.userInterationEnabled = NO;
    return YES;

当我评论 userInteractionEnabled 代码时。 Picker 正在完美打开。但是当我取消注释代码选择器没有打开。

我还为这段代码提供了一些延迟。所以在 dalay 之后,我的选择器又被隐藏了。

【问题讨论】:

可能是因为 yopur textFieled 是滚动视图的子视图,可能尝试在滚动视图上使用 isScrollEnabled。您也可以尝试在作为 textField 的 inputView 插入的根视图中显示选择器。关于 userInteractionEnabled ***.com/questions/10880868/… 的信息 问题解决了吗? 【参考方案1】:

这里的问题是 userInteractionEnabled 是从 scrollView 继承到 textField 的。正如它所解释的here

如果 UITextField 的 userInteractionEnabled 属性为 NO,正如我刚刚发现的那样,它也将拒绝成为第一响应者。在文本字段接受第一响应者状态之前,我必须明确地重新启用用户交互。

而且无法显示textField的inputView。

您应确保您的 textField userInteracationEnables 为 true 或将 pickerView 移到 textField.inputView 之外。

【讨论】:

【参考方案2】:

您可以使用this cool 自定义控件将选择器作为文本字段上的 inputView。

或this one,如果您想在选择器打开时禁用与背景视图的交互。

【讨论】:

以上是关于当scrollview userInteraction Disabled时pickerview隐藏的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动 contentView 之前向上移动 scrollview 的框架? (当 scrollView 从屏幕中间开始时)

SwiftUI:当用户在第一个 ScrollView 中点击该项目时,在特定索引处加载第二个 ScrollView

仅当键盘快速出现时如何使scrollView滚动

如何自动滚动 ScrollViewer - 仅当用户未更改滚动位置时

为啥当其他 textField 变为活动状态时,scrollView 会向下滚动?

当scrollView正在减速时,触摸检测很慢