我知道这个问题存在过几次,然而,没有一个答案能帮助我解决这个问题。
我有一个滚动视图,里面有几个文本字段。除了文本字段之外,其他都很好用。无论我做什么,这些都是不可选择的。我有很多带有文本字段的视图,我用同样的方式实现了这些视图,它们都能工作。我没有主意了。
我的滚动视图
let scrollView = UIScrollView()
scrollView.alwaysBounceVertical = true
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.showsHorizontalScrollIndicator = false
在ScrollView里面首先是一个ContentView,它可能是无用的,但我一直都是这样做的。这只是扩展到ScrollView。在ContentView里面是一个StackView(垂直),它把所有的内容都保存在里面。在StackView里面是,例如,下面的文本字段堆栈(一个标题,一个文本字段和一个错误标签
我的文本字段堆栈
//First Name Field
let firstNameStack = UIStackView()
firstNameStack.axis = .vertical
firstNameStack.spacing = 5
firstNameStack.translatesAutoresizingMaskIntoConstraints = false
firstNameTextFieldTitle.text = "firstName"
firstNameTextFieldTitle.textColor = colors.justWhite
firstNameTextFieldTitle.font = UIFont(name: "Montserrat-SemiBold", size: 14)
firstNameTextFieldTitle.textAlignment = .left
firstNameTextFieldTitle.translatesAutoresizingMaskIntoConstraints = false
firstNameTextField.textColor = colors.justWhite
firstNameTextField.backgroundColor = colors.lightyLightGray
firstNameTextField.attributedPlaceholder = NSAttributedString(string: "first name".localized, attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]) //ID12
firstNameTextField.font = UIFont.init(name: "montserrat", size: 18)
firstNameTextField.autocorrectionType = .no
firstNameTextField.textAlignment = .left
firstNameTextField.layer.cornerRadius = 5
firstNameTextField.clipsToBounds = true
firstNameTextField.setLeftPaddingPoints(10)
firstNameTextField.setRightPaddingPoints(10)
firstNameTextField.keyboardType = .default
firstNameTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
firstNameTextField.translatesAutoresizingMaskIntoConstraints = false
firstNameTextField.delegate = self
firstNameTextFieldError.textColor = colors.errorRed
firstNameTextFieldError.textAlignment = .left
firstNameTextFieldError.font = UIFont(name: "Montserrat-SemiBold", size: 14)
firstNameTextFieldError.translatesAutoresizingMaskIntoConstraints = false
firstNameStack.addArrangedSubview(firstNameTextFieldTitle)
firstNameStack.addArrangedSubview(firstNameTextField)
firstNameStack.addArrangedSubview(firstNameTextFieldError)
视图布局完美。没有问题。我可以使用becomeFirstResponder()打开键盘,但点击它们什么也不做。我觉得监督一些非常简单的事情很愚蠢,这是肯定的。
我添加了一个代理来在解散时关闭键盘,为了确保这一点,我添加了
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool{
return true
}
有什么问题吗?期待任何提示。
1条答案
按热度按时间h43kikqp1#
我已经解决了这个问题,这确实是我自己的愚蠢。对于像我这样盲目的人来说:
添加视图到StackView时要小心。我使用了StackView.addSubview(View)而不是StackView.addArrangedSubview(View),因为我使用自动完成快速完成。这似乎破坏了StackView,从而破坏了触摸识别器。