Ios UITAPPORATION不适用于堆栈视图中的xib文件

Ios UITAPPORATION不适用于堆栈视图中的xib文件,ios,swift,swift4,swift4.2,Ios,Swift,Swift4,Swift4.2,我有一个控制器与这些项目 在堆栈视图中,我动态添加一个或多个xib文件作为UiView,这是我的xib文件代码: class PassengerInfoItem: UIView { @IBOutlet weak var View_Content: UIView! @IBOutlet weak var Label_AddPassenger: UILabel! override init(frame: CGRect) { super.init(frame: frame) sel

我有一个控制器与这些项目

在堆栈视图中,我动态添加一个或多个xib文件作为UiView,这是我的xib文件代码:

class PassengerInfoItem: UIView {
@IBOutlet weak var View_Content: UIView!
@IBOutlet weak var Label_AddPassenger: UILabel!


override init(frame: CGRect)
{
    super.init(frame: frame)
    self.commenInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.commenInit()
}

func commenInit()
{
    Bundle.main.loadNibNamed("PassengerInfoItem", owner: self, options: nil)
    self.View_Content.frame = self.bounds
    self.View_Content.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    addSubview(self.View_Content)
}}
这是我的控制器代码:

for i in 1...(UserSearchModel.Passengers.AdultNumber)!
    {
        let passengerInfoItem = PassengerInfoItem()
        passengerInfoItem.tag = i
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapGesture_PassengerInfo))
        tapGestureRecognizer.delegate = self
        passengerInfoItem.addGestureRecognizer(tapGestureRecognizer)
        self.StackView_AddPassengerInfo.addArrangedSubview(passengerInfoItem)
    }

在堆栈视图中,成功添加了所有passengerInfoItem,但当触摸其中一个时,什么也没有发生,我的问题是UITapGestureRecognitor无法正常工作,我在back view、Scroll view、Card、stack view中选中了all isUserInteractionEnabled=true,但UITapGesture无法工作,因为您在此处添加了另一个实例

 Bundle.main.loadNibNamed("PassengerInfoItem", owner: self, options: nil)
self.View_Content.frame = self.bounds
self.View_Content.autoresizingMask = [.flexibleHeight, .flexibleWidth]
addSubview(self.View_Content)
因此,该手势应用于最后面的视图,您可能需要

class func getInstance() ->  PassengerInfoItem {
   let vv =  Bundle.main.loadNibNamed("PassengerInfoItem", owner: self, options: nil)?.first! as!  PassengerInfoItem
   return vv
}
然后替换

let passengerInfoItem = PassengerInfoItem()


因为您在这里添加了另一个实例

 Bundle.main.loadNibNamed("PassengerInfoItem", owner: self, options: nil)
self.View_Content.frame = self.bounds
self.View_Content.autoresizingMask = [.flexibleHeight, .flexibleWidth]
addSubview(self.View_Content)
因此,该手势应用于最后面的视图,您可能需要

class func getInstance() ->  PassengerInfoItem {
   let vv =  Bundle.main.loadNibNamed("PassengerInfoItem", owner: self, options: nil)?.first! as!  PassengerInfoItem
   return vv
}
然后替换

let passengerInfoItem = PassengerInfoItem()


感谢您的回答,但我遇到了以下错误:无法将“UIView”(0x25a69f158)类型的值强制转换为此行“let vv=Bundle.main.loadNibNamed(“PassengerInfoItem”,所有者:self,选项:nil)?。首先!as!PassengerInfoItem”您需要在Identity inspectorok中为xib
PassengerInfoItem
设置类,该错误已解决,但这两个值为零“查看内容”“标签添加乘客”确保它们已连接到IB每件事都正常工作,但没有显示(添加)在我的堆栈视图中,您知道为什么吗?谢谢您的回答,但我遇到了以下错误:无法在此行“let vv=Bundle.main.loadNibNamed”(“PassengerInfoItem”,所有者:self,选项:nil)上将类型为“UIView”(0x25a69f158)的值强制转换为“Flightio.PassengerInfoItem”。首先!as!PassengerInfoItem“您需要在Identity inspectorok中为xib
PassengerInfoItem
设置类,该错误已解决,但这两个值为零“查看内容”“标签添加乘客”确保它们已连接到IB每件事都正常工作,但在我的堆栈视图中没有显示(添加)您知道为什么吗?