儿童UIViews无法接收触摸事件

时间:2017-11-14 21:20:32

标签: ios iphone uitableview uiview

我有UIViewController嵌入UITableView。此表视图的高度为整个屏幕的3/4。 UIViewController的剩余1/4有一个四舍五入的UIButton会在父视图的顶部触发新的UIView 。 (UITableView)。

实例化并调用UIView后台设置为:  self.backgroundColor = UIColor(black: 1, alpha: 0.5)它通常会使用黑色透视背景填充整个视图,然后会有一个额外的UIView具有以下约束:

Leading: 10
Trailing: 10
Top: 50
Bottom: 50
反过来,这会在tableView之上给我一个'卡'效果。然后,此“卡片”视图具有UITextview属性,当用户点击嵌入了textview的视图时,该属性应显示键盘。

问题: 选择UITextview或甚至触摸此“卡片”视图后,正在选择背景表并与之进行交互。 “卡片”文本字段不会提升键盘,也不会使自己单独交互,因为父表控制器似乎正在接触触摸事件。

在iOS 11中遇到此问题是否有任何解决方案?我从未在iOS 10中遇到过这个问题。我正在使用iPhone X来进一步说明我的问题。

以下是实际问题的一个示例。

enter image description here

注意:如果我要选择卡片本身的暗区,表格视图将接收触摸事件,但不会接收卡片视图中的文本区域。此卡片视图显示键盘的原因是我使用textview.becomeFirstResponder方法在代码中手动调用它。

附加说明:我还在整体呈现子视图中启用了isUserInteractionEnabled = false。仍然不起作用,父视图只接受触摸。

信用卡代码

class Card: UIView {

// instantiating the textview 
var textview = UITextview()
var cardView = UIView()


private override init(frame: CGRect) {
    super.init(frame: frame)

    self.backgroundColor = UIColor(black: 1, alpha: 0.5)    
    self.cardView.backgroundColor = UIColor.white
    self.cardView.layer.cornerRadius = 8

    // Just demo the textview
    self.textview.frame = CGRect(x: 10, y: 100, width: 300. height: 100)



    self.addSubview(cardView) // adding the cardView as a subview to the background colored view
    cardView.addSubview(textview)

}

required init?(coder aDecoder: NSCoder) {
    fatalError("Error")
}

private func ConstrainCardWith() {
    // Constraints 

}


}
 extension UIView {

func Width()-> CGFloat {
    return UIScreen.main.bounds.size.width
}
func Height()-> CGFloat{
    return UIScreen.main.bounds.size.height
}
}

1 个答案:

答案 0 :(得分:0)

问题是你的容器视图(cardview)没有框架,所以你的子视图(textview)不能触摸因为它超出范围,所以只需在卡片视图中添加一些框架就可以解决这个问题