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 animationWithDuration 在调用两次时不起作用