【问题标题】:How i open XIb file button to ViewController我如何打开 XIb 文件按钮到 ViewController
【发布时间】:2021-10-13 19:42:10
【问题描述】:

当我点击这个edit 按钮时,我想打开 WolverineVC

    class XibFileController: UIView {

           // This Is XIB controller File
           @IBAction func editButtonTapped(_ sender: UIButton) {
               // TODO: Click here to open wolverineVC
           }
    }

这是 Xib 文件

这是我的故事板文件

【问题讨论】:

  • 您想在点击编辑按钮时打开包含编辑按钮的 Xib 文件吗?这对我来说没有意义。
  • 获取故事板的引用,实例化控制器并在导航堆栈中执行pushViewController。

标签: swift xcode storyboard xib


【解决方案1】:
  guard let viewController = UIStoryboard(name: "Wolverine", bundle: nil).instantiateViewController(withIdentifier: "WolverineVC") as? WolverineVC
        else {
            return
        }
        self.navigationController?.pushViewController(viewController, animated: true)

您需要添加故事板 ID 来实例化您的故事板。

编辑:根据您更新的问题。

protocol XibDelegate: AnyObject {
 func openWolverineVC(value: Bool)
}

class XibFileController: UIView {

        weak var delegate: XibDelegate?

       // This Is XIB controller File
       @IBAction func editButtonTapped(_ sender: UIButton) {
           self.delegate?.openWolverineVC(value: true)
       }
}

你的主视图控制器应该是这样的:

    final class MainViewController: UIViewController, XibDelegate {
    

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

  func openWolverineVC(value: Bool) {
   guard let viewController = UIStoryboard(name: "Wolverine", bundle: nil).instantiateViewController(withIdentifier: "WolverineVC") as? WolverineVC
            else {
                return
            }
     viewController.boolValue = value
     self.present(viewController, animated: true)
  }

}

【讨论】:

  • 我更新了我的问题以便更好地理解,请看一下谢谢。
  • 错误来了~'XibFileController'类型的值没有成员'navigationController'
  • 因为你的xib实际上是一个UIView。您需要将其委托给父类,该类必须是视图控制器。您不能从 UIView 呈现或推送。
  • 我想将Bool 数据传递给WolverineVC.swift 文件,你对此有什么想法
  • xibReference.delegate = self 这一行出错
【解决方案2】:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(identifier: "premiumPage")
self.present(viewController, animated: true, completion: nil)
  • 首先,让我们创建一个故事板,然后给一个名称(如果您的故事板名称为“Main.storyboard”,则名称为“Main”或 Wolverine.storyboard -> 名称为:“Wolverine”)
  • 进入情节提要,单击要打开的页面并为其指定标识符。 (名称为 Storyboard ID。如图 2 所示)
  • 现在将上面的代码添加到editButtonTapped函数中
  • 就是这样

【讨论】:

  • 我尝试但是出现错误〜类型'XibFileController'的值没有成员'present'我更新了我的问题以便更好地理解请看一下谢谢。
  • 是的。抱歉,目前的方法不是 UIView 的方法
  • self.navigationController?.pushViewController(viewController, animated: true) 尝试将当前方法更改为此方法
  • 您遇到了什么错误。 (写错误信息)
猜你喜欢
  • 1970-01-01
  • 2018-07-14
  • 2015-05-28
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多