ios - 与 View Controller 内的自定义 UIView 交互

标签 ios swift uiview

我创建了一个 UIView,我想在 View Controller 中显示它。我已经创建了 UIView 并与其他 UI 组件一起显示,但我现在遇到的问题是我无法与 UIView 上的元素进行交互。

下面是我的代码

class SliderView: CustomView {

    @IBOutlet weak var containerView: UIView!
    @IBOutlet weak var sliderImage: UIImageView!
    @IBOutlet weak var sliderText: UILabel!

    override func initialize() {
        super.initialize()

        let name = String(describing: type(of: self))
        let nib = UINib(nibName: name, bundle: .main)
        nib.instantiate(withOwner: self, options: nil)

        self.addSubview(self.containerView)
        self.containerView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            self.containerView.topAnchor.constraint(equalTo: self.topAnchor),
            self.containerView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
            self.containerView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
            ])
    }

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        return sliderImage.frame.contains(point)
    }

@IBAction func clickme(_ sender: UIButton) {
    print("SWIPPERD minmax22g")
}

}

在 View Controller 中

weak var sliderView: SliderView!

    override func loadView() {
        super.loadView()

        let sliderView = SliderView()
        self.view.addSubview(sliderView)
        NSLayoutConstraint.activate([
            sliderView.topAnchor.constraint(equalTo: self.view.topAnchor),
            sliderView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            sliderView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            ])
        self.sliderView = sliderView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        sliderView.sliderText.text = "HOOOOO WORKS"
}

最佳答案

1-您不应在自定义 View 中再次添加 socket 作为 subview

@IBOutlet weak var containerView: UIView!
self.addSubview(self.containerView)

添加此方法并使用它来获取实例

static func getInstance() -> SliderView { 
   return Bundle.main.loadNibNamed("SliderView", owner: self, options: nil)![0] as! SliderView
}

2-这将使 imageView 成为 View 内唯一的事件框架

return sliderImage.frame.contains(point)

3-不要在 loadView 中添加 subview ,而是在 viewDidLoad 中添加 subview

let sliderView = SliderView()

let sliderView = SliderView.getInstance()

关于ios - 与 View Controller 内的自定义 UIView 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863700/

相关文章:

ios - UICollectionView 的插图没有一直向下滚动

ios - 如何更改 GoogleMaps iOS 中簇标记标题的颜色和大小?

ios Event Kit 使用我自己的通知

ios - swift 中的排名数字循环

ios - 当我将它们嵌入 Stack 时,标签会自动更改其大小

ios - UIView动画选项没有效果

ios - 如何管理 ios ARC 项目中的内存分配问题

ios - 线圆与阴影 swift

ios - UIView的方法困惑

swift - 即使在同一 Controller 中, socket 为零