Swift:UITextView在UIStackView中不可选

yqyhoc1h  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(165)

我知道这个问题存在过几次,然而,没有一个答案能帮助我解决这个问题。
我有一个滚动视图,里面有几个文本字段。除了文本字段之外,其他都很好用。无论我做什么,这些都是不可选择的。我有很多带有文本字段的视图,我用同样的方式实现了这些视图,它们都能工作。我没有主意了。
我的滚动视图

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
}

有什么问题吗?期待任何提示。

h43kikqp

h43kikqp1#

我已经解决了这个问题,这确实是我自己的愚蠢。对于像我这样盲目的人来说:
添加视图到StackView时要小心。我使用了StackView.addSubview(View)而不是StackView.addArrangedSubview(View),因为我使用自动完成快速完成。这似乎破坏了StackView,从而破坏了触摸识别器。

相关问题