Ios 子视图无法接收触摸事件

Ios 子视图无法接收触摸事件,ios,iphone,uitableview,uiview,Ios,Iphone,Uitableview,Uiview,我有一个UIViewController,它嵌入了UITableView。此表格视图的高度为整个屏幕的3/4。UIViewController的剩余1/4有一个圆形的ui按钮,该按钮在父视图顶部触发一个新的UIView。(UITableView) 在实例化并调用背景设置为: self.backgroundColor=UIColor(黑色:1,alpha:0.5)它通常会用黑色透明背景填充整个视图,然后会有一个附加的UIView,具有以下约束: Leading: 10 Trailing: 10 T

我有一个
UIViewController
,它嵌入了
UITableView
。此表格视图的高度为整个屏幕的3/4。
UIViewController
的剩余1/4有一个圆形的
ui按钮
,该按钮在父视图顶部触发一个新的UIView。(
UITableView

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

Leading: 10
Trailing: 10
Top: 50
Bottom: 50
这反过来在
表视图的顶部给了我一个“卡片”效果。这个“卡片”视图有一个
UITextview
属性,当用户点击嵌入textview的视图时,该属性应该显示键盘

问题: 选择
UITextview
,甚至触摸此“卡片”视图时,背景表被选中并与之交互。“Card”文本字段既不会提升键盘,也不会使其自身单独交互,因为父表控制器似乎正在获取触摸事件

iOS 11中遇到的这个问题有什么解决方案吗?我在iOS 10中从未遇到过这个问题。我用iphonex来进一步说明我的问题

以下是实际发生问题的示例。

注意:如果选择卡本身的暗区,表视图将接收触摸事件,但不会接收卡视图中的文本区域。这个卡片视图显示键盘的原因是我用
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
}
}

问题是您的容器视图(cardview)没有框架,因此您的子视图(textview)无法触摸,因为它超出了边界,因此只需在您的卡片视图中添加一些框架即可解决此问题。

问题是您的容器视图(cardview)没有框架,因此您的子视图(textview)无法触摸,因为它超出了边界,因此,只需在您的卡片视图中添加一些框架即可解决此问题

请添加一些代码:)看起来您正在设置图层。子视图上的z位置
isUserInteractionEnabled
将只会导致父视图收到触摸。坏主意。@incmiko我没有意识到这一点。在iOS 11之前,我是这样做的,我从未遇到过这样的问题。我的另一个应用程序有这个问题。它是为iOS 10 Swift 3编写的。现在它也有问题了:(在iOS 11上仍然适用于我..请添加一些代码:)看起来您正在设置层。子视图上的z位置
isUserInteractionEnabled
将只会导致父视图收到触摸。坏主意。@incmiko我没有意识到这一点。在iOS 11之前,我是这样做的,我从未遇到过这样的问题。我的另一个应用程序有这个问题。它是为iOS 10 Swift 3编写的。现在它也有一些问题:(在iOS 11上仍然适用于我。。cardView本身受自动布局限制。这可能是问题所在吗?@LovinginNYC当您以编程方式添加视图时,需要将其翻译AutoResizezingMackintoConstraints设置为false,否则,它将自动设置其自动布局。因此,在这种情况下,您添加了一个大小为0的cardView,并且n它会将约束设置为零。cardView本身受autolayout约束。这可能是问题所在吗?@LovelingNYC当您以编程方式添加视图时,需要将其translatesAutoresizingMaskIntoConstraints设置为false,否则,它会自动设置其autolayout。因此,在这种情况下,您添加了一个大小为的cardView0,然后将约束设置为零。