【问题标题】:Present uiviewcontroller from ParentViewController in Swift 4在 Swift 4 中从 ParentViewController 呈现 uiviewcontroller
【发布时间】:2019-04-02 01:54:46
【问题描述】:

我有一个具有 2 个子视图的父视图,我试图将 uiviewcontroller 显示为“模态呈现”我使用以下代码:

class ParentCtrl: ButtonBarPagerTabStripViewController {
    let obj = ChildCtrl()
override func viewDidLoad() {
        super.viewDidLoad()
        obj.someClassMethod()
    }
}

class ChildCtrl: UIViewController, IndicatorInfoProvider {
   struct Storyboard {
    static let segue_id = "segue_id"
}
   public func someClassMethod(){
        self.performSegue(withIdentifier: Storyboard.segue_id, sender: self)
    }

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if(segue.identifier == Storyboard.segue_id){
            let destino = segue.destination as! NewViewController
            destino.seleccion = seleccion
        }
    }
}

但我收到以下错误:

没有带有标识符“segue_id”的segue 但是,是的,我有那个标识符,因为如果我复制:

self.performSegue(withIdentifier: Storyboard.segue_id, sender: self)

在 viewDidload 方法中展示了 NewViewController

我该如何解决?

【问题讨论】:

  • 故事板转场?
  • 如果出现NewViewController,那么问题是什么?
  • 创建segue时必须在storyboard中指定segue_id
  • @Tobi 我编辑了我的问题,我创建了一个结构
  • @PGDev 是的,我在情节提要中指定了,我的错误是 self.performSegue(withIdentifier: Storyboard.segue_id, sender: self) 在 someClassMethod() 中调用

标签: ios swift xcode swift4 xlpagertabstrip


【解决方案1】:

您只是在创建ChildCtrl 的实例,而不是使用来自情节提要的实例。结果,该实例对任何故事板文件一无所知,因此没有执行转场的上下文。

您需要从屏幕上的ChildCtrl 实例执行转场。

【讨论】:

  • 我明白了:谁的视图不在窗口层次结构中!
  • 不要在viewDidLoad 中调用子视图控制器上的方法。致电viewDidAppear
  • 我正在尝试调用这个来自 viewdidload 或 viewdidappear 方法的 someClassMethod()
  • 您需要为您的问题添加更多细节。展示您的故事板以及如何创建各种视图控制器以及您如何调用各种函数
  • 当我在我的 childctrl viedidload() 中复制这一行 self.performSegue(withIdentifier: Storyboard.segue_id, sender: self) 时,会显示 newviewctrl 但我想从我的父视图访问我得到了错误
【解决方案2】:

指定Storyboard Segue 标识符,即

并在编写代码执行segue时使用此id,即

self.performSegue(withIdentifier: "segue_id", sender: self)

编辑:

storyboard 创建obj,即

let obj = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildCtrl") as! ChildCtrl

【讨论】:

  • 是的,我这样做了,当我调用这个时:self.performSegue(withIdentifier: Storyboard.segue_id, sender: self) in my viewDidLoad 我没有收到错误,但是当我从 parentview 调用时我得到错误
  • 是否有任何从ParentCtrlNewViewController 的连接。
  • 情节提要中控制器的类是什么?是ChildCtrl 还是ParentCtrl
  • ChildCtrl,我使用 XLPagerTabStrip lib 在哪里设置 ParentCtrl 并具有 ChildCtrl,这是我试图从 childCtrl 访问方法的场景,请参阅我的代码
  • ChildCtrl 是否嵌入在 ParentCtrl 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 2022-11-11
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多