无法从连接到XIB的UIView执行检测

时间:2018-10-12 15:54:22

标签: swift uiview uiviewcontroller segue xib

这是UIView文件的XIB所有者

import UIKit

class sideBarContent: UIView  {

@IBOutlet weak var userName: UILabel!
@IBOutlet var sideBarContentView: UIView!
let mapviewcontroller = MapViewController()

@IBAction func userProfile(_ sender: UIButton) {

    mapviewcontroller.performSegueFromView(stringFromView: "userprofile")
}

在我的UIviewcontroller中

class MapViewController: UIViewController
{
    func performSegueFromView(stringFromView:String){
    performSegue(withIdentifier: "\(stringFromView)", sender: nil)
    }
}

它说我的segue标识符不存在,请帮助,我已经迷路了。而且我也无法在UIView中执行segue,我也尝试使用情节提要ID方法,但是目前(vc,动画:true,完成:nil)没有显示。

1 个答案:

答案 0 :(得分:0)

首先,我认为您不应该从视图访问视图控制器。最好在视图控制器中而不是在视图控制器中对控制器逻辑建模。

也就是说,您可以使用委托模式来实现您的功能。

import UIKit

class SideBarContent: UIView  {

    @IBOutlet weak var userName: UILabel!
    @IBOutlet var sideBarContentView: UIView!

    let delegate: SideBarContentDelegate? = nil

    @IBAction func userProfile(_ sender: UIButton) {
        self.delegate?.performSegueFromView(withIdentifier: "userprofile")
    }
}

protocol SideBarContentDelegate {
    func performSegueFromView(withIdentifier identifier: String)
}

class MapViewController: UIViewController, SideBarContentDelegate {

    @IBOutlet private weak var sidebarView: SideBarContent!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sidebarView.delegate = self
    }

    func performSegueFromView(withIdentifier identifier: String) {
        self.performSegue(withIdentifier: identifier, sender: nil)
    }
}

更多信息:https://stackoverflow.com/a/1340470/2603900