UITextField 添加到 UIView 时不响应触摸事件

Posted

技术标签:

【中文标题】UITextField 添加到 UIView 时不响应触摸事件【英文标题】:UITextField not responds to touch events when added to UIView 【发布时间】:2016-07-02 10:19:40 【问题描述】:

当 UITextField 添加到 ContainerView 时,我遇到了一个不响应触摸事件的问题。当我尝试将 UITextField 添加到主 UIViewController 时,它似乎很好并且它响应(键盘正在显示)。

我试图将子视图放在前面,在 ContainerView 上启用用户交互 - 没有任何帮助。

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.scrollView = UIScrollView()
    self.containerView = UIView()

    self.scrollView.delegate = self
    self.containerView.userInteractionEnabled = true

    self.scrollView.addSubview(containerView)
    self.view.addSubview(scrollView)

    registerForKeyboardNotifications()
    setupGesturesAndMap()
    setupActivityIndicator()
    setupCircleButton()
    setupBrowseTextField()

    // Initializing status
    status = Status.Init


override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()

    scrollView.frame = self.view.bounds
    containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)

还有负责设置browseTextField的函数:

func setupBrowseTextField() 

    // Setup of browseTextField
    browseTextField = UITextField(frame: CGRectMake(10, self.view.frame.height / 2, self.view.frame.width - 20, self.view.frame.height / 12))
    browseTextField.placeholder = "Enter your destination here"
    browseTextField.font = UIFont.systemFontOfSize(15)
    browseTextField.borderStyle = UITextBorderStyle.RoundedRect
    browseTextField.autocorrectionType = UITextAutocorrectionType.No
    browseTextField.keyboardType = UIKeyboardType.Default
    browseTextField.returnKeyType = UIReturnKeyType.Done
    browseTextField.clearButtonMode = UITextFieldViewMode.WhileEditing
    browseTextField.contentVerticalAlignment = UIControlContentVerticalAlignment.Center
    browseTextField.delegate = self

    containerView.addSubview(browseTextField)

大家有什么建议吗?

【问题讨论】:

我认为您必须将文本字段的委托更改为滚动视图或容器视图。所以:browseTextField.delegate = self.scrollView browseTextField.delegate = self.containerView 老实说,我不认为将代理设置为滚动视图或容器视图会影响任何事情(为什么会这样?)。很可能您的某些手势与文本字段点击冲突。我建议你在手势委托中添加-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: 方法,看看它是否有效。 【参考方案1】:

我看到你已经将 containerView 的框架设置为

containerView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)

scrollView.contentSize.width 为 0。

这解决了你的问题。

containerView.frame = self.view.bounds

你也可以通过scrollView的框架大小来给containerView的大小

containerView.frame = CGRectMake(0, 0, scrollView.frame.width, scrollView.frame.height)

【讨论】:

非常感谢,scrollView.contentSize.width 实际上是 0....我永远不会想出那个 ;) 再次感谢。

以上是关于UITextField 添加到 UIView 时不响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

无法在 UIView 中居中 UITextField

UIView animationWithDuration 在调用两次时不起作用

以编程方式添加带有约束的 UITextField

以编程方式在 UIView 上添加 UITextField Swift

如何以编程方式将文本添加到 UIView

UIView 的子类。如何通过 Interface Builder 添加?