2

我正在尝试自定义 UIView,但是当我调用它时,自定义视图的出口始终为零,并且 awakeFromNib() 也从未调用过。这是我的自定义视图:

class DropdownMenuView: UIView {

    //MARK: Outlets

    @IBOutlet var view: DropdownMenuView!

    @IBOutlet weak var fadeView: UIView!

    @IBOutlet weak var tableView: UITableView!

    var selection:Selection = .Default
    var iconType:IconType = .Default
    var menuTitles:[String] = []

    var cellHeight:CGFloat = 44

    var textColorNomal:UIColor = UIColor.blackColor()
    var textColorHighlight:UIColor  = UIColor.redColor()

    var isShown: Bool!

    //MARK: Lifecycle

    override func awakeFromNib() {
        print("awakeFromNib")
        super.awakeFromNib()
        initSubviews()
        configView()
    }

    override func layoutSubviews() {
        super.layoutSubviews()

    }

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

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

    }

    func initSubviews() {
        if let nibsView = NSBundle.mainBundle().loadNibNamed("DropdownMenuView", owner: self, options: nil) as? [UIView] {
            let nibRoot = nibsView[0]
            self.addSubview(nibRoot)
            nibRoot.frame = self.bounds
        }

    }

    required init(uSelection: Selection = Selection.Default, uIconType:IconType = IconType.Default, uMenuTitles:[String]) {
        self.selection = uSelection
        self.iconType = uIconType
        self.menuTitles = uMenuTitles
        super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    }



    private func configView() {
        switch (selection) {
        case Selection.Multiple:
            tableView.allowsMultipleSelection = true
        default:
            tableView.allowsMultipleSelection = false
        }

        tableView.registerNib(UINib(nibName: "DropdownMenuCell", bundle: nil), forCellReuseIdentifier: "DropdownMenuCell")
    }

    override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
        hideMenu()
    }

    internal func show() {
        if self.isShown == false {
            self.showMenu()
        }
    }

    internal func hide() {
        if self.isShown == true {
            self.hideMenu()
        }
    }

    func showMenu() {

        self.isShown = true

        if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {
            window.bringSubviewToFront(self)
        }

        // Animation
        UIView.animateWithDuration(0.3, animations: { () -> Void in
            self.alpha = 1
        })
    }

    func hideMenu() {

        self.isShown = false

        // Animation
        UIView.animateWithDuration(0.3, animations: { () -> Void in
            self.alpha = 0
        })
    }


}

 //MARK: UITableViewDelegate methods
extension DropdownMenuView: UITableViewDelegate {

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return CGFloat(menuTitles.count) * cellHeight
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return cellHeight
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("DropdownMenuCell") as! DropdownMenuCell
        cell.lblTitle.text = menuTitles[indexPath.row]
        cell.iconType = iconType
        return cell
    }

}

//MARK: UITableViewDataSource methods
extension DropdownMenuView: UITableViewDataSource {
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return menuTitles.count
    }
}

我试图移除插座并再次连接,但我并不幸运。它不再工作了。你可以在这里查看我的完整演示项目: https ://www.dropbox.com/s/5udbl2kn9vnwjar/ModuleDemo.zip?dl=0

您单击 StartVC 上的“标签”以调用自定义 UIView。

我希望我问的是可能的。任何帮助总是合适的!

4

0 回答 0