如何在swift中按下按钮从另一个xib文件加载另一个xib文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在swift中按下按钮从另一个xib文件加载另一个xib文件相关的知识,希望对你有一定的参考价值。

我正在使用xib的两个UIView文件。我想在Custominfoview的第一张xib视图中按下按钮显示FirstView。我在这里有点困惑如何做到这一点。我的代码如下,请告诉我该怎么做。我搜索了很多,但没有找到。我在链接中附上了一张我非常想要的图片。

enter image description here

class CustominfoView: UIView {
    @IBOutlet var mainCustomView: UIView!
    @IBOutlet weak var infotextLbl: UILabel!

    // MARK:-
    // MARK:- Methods

    // MARK: UIView Methods

    required init(coder aDecoder : NSCoder) {
        super.init(coder :aDecoder)!
        setup()
    }

    override init(frame : CGRect) {
        super.init(frame: frame)
        setup()
    }

    func setup() {
        let view = loadViewFromXib()
        view.frame = bounds
        // view.autoresizingMask = UIViewAutoresizing.flexibleWidth | UIViewAutoresizing.flexibleHeight
        view.layer.cornerRadius = 12
        view.layer.borderColor = UIColor.red.cgColor
        view.layer.borderWidth = 2
        addSubview(view)

    }

    func loadViewFromXib() -> UIView {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "CustominfoView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
    }
}


class FirstView: UIView {
    @IBOutlet var mainCustomView: UIView!
    @IBOutlet weak var infotextLbl: UILabel!

    // MARK:-
    // MARK:- Methods

    // MARK: UIView Methods

    required init(coder aDecoder : NSCoder) {
        super.init(coder :aDecoder)!
        setup()
    }

    override init(frame : CGRect) {
        super.init(frame: frame)
        setup()
    }

    func setup() {
        let view = loadViewFromXib()
        view.frame = bounds
        // view.autoresizingMask = UIViewAutoresizing.flexibleWidth | UIViewAutoresizing.flexibleHeight
        view.layer.cornerRadius = 12
        view.layer.borderColor = UIColor.red.cgColor
        view.layer.borderWidth = 2
        addSubview(view)

    }

    func loadViewFromXib() -> UIView {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "CustominfoView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        return view
    }

@IBAction func infoBtnpressed(_ sender: UIButton) {

        print("Pressed")
    }
}

}
答案

只需使用addSubview将customInfoView作为子视图添加到第一个视图的顶部。

(按下按钮)

让customInfoView = CustomInfoView()

self.addSubview(customInfoView)

然后当你需要解雇它时,只需将其从父项中删除即可。

另一答案

你可以这样做:

@IBAction func infoBtnpressed(_ sender: UIButton) {
    print("Pressed")
    let customInfoView = CustomInfoView(frame: CGRect(x: 100, y: 100, width: 200, height: 200) )
    self.addSubView(customInfoView)
}

CGRect中,根据需要传递帧值。此外,您应该将customInfoView声明为global,以便您可以轻松删除它。

以上是关于如何在swift中按下按钮从另一个xib文件加载另一个xib文件的主要内容,如果未能解决你的问题,请参考以下文章

从另一个类缩放 MkMapView

如何在另一个视图中加载 xib 文件?

从按钮按下加载xib

Swift:在警报视图中按下按钮后,tableView 不会重新加载数据

在 iOS 中按下按钮时打开另一个视图

swift 3 在tableView 中按下了哪个单元格按钮