我遇到通过代码添加UITextField的问题。当我在空视图控制器中使用这个简单的代码时,一切正常:
let textField = UITextField(frame: CGRect(x: 10, y: 10, width: 200, height: 20))
textField.text = "test"
scrollView.addSubview(textField)
但在我的自定义UIScrollView
内,由于某种原因,它无法正常工作(编辑不要开始)。
我尝试为userInteractionEnabled
设置textField
,也为superview设置{但是这没有用。我不知道如何调试以查看阻止编辑的属性。没有键盘弹出;我无法在模拟器内键入和/或进行选择。同样奇怪的是其他控件如UIButton工作得很完美并且接触到了。
可以看出,我没有添加委托,但它在没有它的空UIViewController上工作得非常好。
po textField.canBecomeFirstResponder()
返回true。
答案 0 :(得分:2)
我正在阅读apple documentation,我发现了这个:
如果此属性的值为true,则滚动视图会延迟处理触摸手势,直到它可以确定滚动是否为 意图。如果值为false,则立即调用滚动视图 touchesShouldBegin:withEvent:方法inContentView :.默认值为 真。强>
此方法通过调用遍历视图层次结构 pointInside:withEvent:每个子视图的方法来确定哪个 子视图应该会收到触摸事件。如果pointInside:withEvent: 返回true,然后类似地遍历子视图的层次结构 直到找到包含指定点的最前面的视图。如果一个 view不包含该点,它的视图层次结构的分支是 忽略。
答案 1 :(得分:1)
将scrollView.delaysContentTouches设置为NO。
您可能需要提出自己的逻辑来关闭/打开它,具体取决于是否意外触摸scrollView内的控件成为问题。
您也可以点按并按住textField而不滚动。它应该调出键盘,但大多数用户可能不会知道这样做。