ios - Swift 4 从自定义 ViewController 开始

标签 ios swift navigation

我有聊天应用程序。我决定为其创建幻灯片教程。现在我有问题了。如何在用户安装应用程序时仅运行一次TutorialVC?

通常应用程序以 AuthVC 开头。现在我想只运行一次tutorialVC,然后当用户关闭应用程序并再次运行它时,像通常一样从auth运行。

我的 VC 教程:

class TutorialViewController: UIViewController, UIScrollViewDelegate {
    @IBAction func understandButtonAction(_ sender: Any) {
    }

    @IBOutlet weak var understandButton: UIButton!
    @IBOutlet weak var tutorialPageControl: UIPageControl!
    @IBOutlet weak var tutorialScrollView: UIScrollView!

    var images: [String] = ["1","2","3","4"]
    var frame = CGRect(x: 0, y: 0, width: 0, height: 0)

    override func viewDidLoad() {
        super.viewDidLoad()

        setup()
        addSlider()
        setupButton()
    }

    //===============================
    //EVTAuthorizationViewController
    //===============================
    override func viewWillAppear(_ animated: Bool) {
        UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
    }

    override func viewWillDisappear(_ animated: Bool) {
        UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
    }

    //AddButton
    func setupButton(){
        understandButton.layer.cornerRadius = 20
    }

    @IBAction func buttonAction(_ sender: Any?) {
        print("Successful")
    }

    //ScrollBars
    func setup(){
        self.understandButton.isHidden = true
        tutorialScrollView.showsHorizontalScrollIndicator = false
        tutorialScrollView.showsVerticalScrollIndicator = false
    }

    //ScrollView method
    //=============================
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        var pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
        tutorialPageControl.currentPage = Int(pageNumber)
        if tutorialPageControl.currentPage == 3{
            self.understandButton.isHidden = false
        }else{
            self.understandButton.isHidden = true
        }
    }

    //Addslider with photo
    func addSlider(){
        tutorialPageControl.numberOfPages = images.count
        for index in 0..<images.count{
            let xPos = self.view.frame.size.width * CGFloat(index)
            frame.origin.x = tutorialScrollView.frame.size.width * CGFloat(index)
            //frame.size = view.frame.size

            let imageView = UIImageView(frame: CGRect(x: xPos, y: 0, width: self.view.frame.width, height: self.view.frame.size.height))
            imageView.image = UIImage(named: images[index])
            imageView.contentMode = .scaleAspectFill
            self.tutorialScrollView.addSubview(imageView)
        }

        tutorialScrollView.contentSize = CGSize(width: (view.frame.size.width * CGFloat(images.count)), height: view.frame.size.height)
        tutorialScrollView.delegate = self
    }
}

a busy cat

最佳答案

使用userDefaults。我认为理解按钮是用户点击以跳过教程的按钮,因此当点击它时,为您要使用的键设置一个 bool 值,在这里我选择了“教程呈现”:

@IBAction func understandButtonAction(_ sender: Any) {
    UserDefaults.standard.set(true, forKey: "tutorial presented")
}

当应用程序启动时,在AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    let window = (UIApplication.shared.delegate as! AppDelegate).window
    let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
    if UserDefaults.standard.bool(forKey: "tutorial presented") == true {
        let controller = storyboard.instantiateViewController(withIdentifier: "Your Navigation controller name")
        window?.rootViewController = tutorialViewController()
    } else {
        let tutorial = storyboard.instantiateViewController(withIdentifier: "Your tutorial controller name")
        window?.rootViewController = tutorial
    }
    window?.makeKeyAndVisible()
    return true
}

关于ios - Swift 4 从自定义 ViewController 开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51933585/

相关文章:

ios - 如何在swift 3中解析Json对象

ios - iOS 选项卡式应用程序中的单个导航栏

ios - 如何去除大标题导航栏的底部边框?

ios - swift 3 : If let statement crashes instead of executing else block

ios - 我怎么能得到iOS8.3中的一组表情符号

swift - 在 Swift 中将字体大小更改为 25 时标签消失

swift - 在 Collection View 中将相邻单元格向右移动

browser - 如何阻止人们在离开我的网站后使用后退浏览器按钮,以便他们无法返回?

iphone - 我如何更改导航栏的背景颜色

css - 如何设计独特的 CSS 导航菜单