IOS 呈现 PageViewController

IOS Presenting PageViewController

我有一个简单的应用程序,我想在用户首次登录应用程序时在其中显示一个 PageViewController。他们查看教程后,在下一次加载时不会显示 PageViewController。

但是我收到了以下消息。

2017-01-24 00:20:32.620321 Infinity Toolkit[591:83298] Warning: Attempt to present <Infinity_Toolkit.PageViewController: 0x10e026000> on <Infinity_Toolkit.ViewController: 0x10dd0b030> whose view is not in the window hierarchy!    

UIViewController - 默认控制器

 override func viewWillAppear(_ animated: Bool) {
    displayWalkthroughs()
}

显示练习函数

func displayWalkthroughs()
{
    // check if walkthroughs have been shown
    let userDefaults = UserDefaults.standard
    let displayedWalkthrough = userDefaults.bool(forKey: "DisplayedWalkthrough")

    // if we haven't shown the walkthroughs, let's show them
    if !displayedWalkthrough {
        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        // instantiate neew PageVC via storyboard
        if let pageViewController = storyboard.instantiateViewController(withIdentifier: "PageViewController") as? PageViewController {
            self.present(pageViewController, animated: true, completion: nil)
         print("tried")

        }
    }
}

我认为那里有足够的代码可供调查。如果您需要,我们很乐意上传更多内容。

我认为 viewWillAppear 不够。 我认为您只能在调用 viewDidAppear 后显示 UI 。试试把你的电话拨到那里。

amahfouz 的回答完全正确。了解 viewDidLoad、viewWillAppear 和 viewDidAppear 的层次结构以及为什么此函数在 viewDidAppear 而不是 viewWillAppear 中起作用很重要。花 5 分钟这样做,当您开始构建更大的应用程序时,它会对您有很大帮助。