【问题标题】:Unable to perform segue from UIView connected to XIB无法从连接到 XIB 的 UIView 执行 segue
【发布时间】:2019-03-17 21:28:15
【问题描述】:

这是 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,我也尝试使用 storyboard ID 方法,但是 present(vc,animated:true,completion:nil) 没有出现。

【问题讨论】:

  • let mapviewcontroller = MapViewController() 这是一个新的对象,而不是你想象的那个在故事板中的 segue。如果sideBarContent 实例是MapViewController 的对象,您可以使用委托模式或闭包告诉MapViewController 类型的父实例执行转场。
  • @Larme 我尝试使用委托来告诉 parent ,但是它说我的委托找到了 nil,而且它总是 nil。即使我输入了这样的内容:delegate.dataSentBackToParent(dataString : "userprofile")。请帮忙..
  • 您是否设置了delegate?使用您当前的代码编辑您的问题。

标签: swift uiview uiviewcontroller segue xib


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多