如何从自身呈现相同的当前视图控制器

时间:2019-07-03 09:08:47

标签: ios swift xcode

我正在制作一个应用程序,每次按下下一个按钮时都会更改情节提要的文本,但是我希望每次按下下一个按钮时都使用segue类型的动画

我尝试调用一个指向视图控制器的segue,但它名为SIGABART

    public func segue() {

        var slide: [String] = GetText().Main(text: .info(0, 0))

        print(slide)

        SectionViewController().setValues(title: slide[1], buttonTitle: slide[3], body: slide[2])

        performSegue(withIdentifier: slide[0], sender: nil)
    }

我也尝试过

let vc = SectionViewController() //my view controller class
self.present(vc, animated: true, completion: nil)

但是在尝试更新标签时会说Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

我希望视图控制器会随着动画再次弹出,但是它可能因SIGABART而崩溃,原因可能是视图控制器不“拥有” segue

2 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

let vc = SectionViewController()
vc.textForLabel = "test"
self.present(vc, animated: true, completion: nil)

然后在您的SectionViewController viewDidLoad方法中,只需

self.yourLabel.text = self.textForLabel

我认为您崩溃是因为您尝试更新标签上的文本,但是标签未加载并准备就绪 因此,决定是要保存您的数据(例如本示例中的文本),并在加载视图时更新UI-您的标签将在此处加载。

答案 1 :(得分:0)

不是像Segue那样使用SectionViewController以编程方式显示SectionViewController的另一个实例,

class SectionViewController: UIViewController {
    @IBOutlet weak var label: UILabel!

    func setValues(title: String, buttonTitle: String) {
        label.text = title
        //add your code...
    }

    func showSectionVC() {
        if let vc = self.storyboard?.instantiateViewController(withIdentifier: "SectionViewController") as? SectionViewController {
            vc.setValues(title: "", buttonTitle: "")
            self.present(vc, animated: true, completion: nil)
        }
    }
}

从您要在已显示的showSectionVC()中显示SectionViewController的任何地方呼叫SectionViewController

此外,不要忘记正确连接outletlabel的{​​{1}}的情况。