通过向左滑动返回上一个视图控制器

3

我有两个视图控制器。1:登录页面(主视图控制器) 2:注册页面。假设我想从注册页面返回到登录页面。如何解决这个问题(使用导航控制器),我是Swift和iOS的新手。这是我的AppDelegate.swift代码。

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor()
    self.window?.rootViewController = ViewController()
    self.window?.makeKeyAndVisible()

    return true
}
2个回答

3

以编程方式嵌入导航控制器

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().backgroundColor = UIColor.whiteColor()

        let loginViewController: LoginViewController = LoginViewController(nibName: "LoginViewController", bundle: nil)
        let navController: UINavigationController = UINavigationController(rootViewController: loginViewController)
        window!.makeKeyAndVisible()
        window!.addSubview(navController.view!)

        return true
    }

使用Storyboard嵌入导航控制器

要启用导航控制器,您需要将登录视图控制器嵌入到导航控制器中

打开Storyboard --> 选择loginviewcontroller --> 编辑器(在Xcode菜单中)--> 嵌入 --> 导航控制器

进入图片描述

您可以看到结果如下

进入图片描述

然后只需更新应用程序委托方法以更改导航栏背景颜色即可。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().backgroundColor = UIColor.whiteColor()

        return true
    }

LoginViewController控制器的viewDidLoad方法中添加向右滑动手势

override func viewDidLoad() {
        super.viewDidLoad()

        let swiperight: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(LoginViewController.swiperight(_:)))
        swiperight.direction = .Right
        self.view!.addGestureRecognizer(swiperight)   
    }

    func swiperight(gestureRecognizer: UISwipeGestureRecognizer) {
            //Do what you want here
            //Load Signup view controller here

func swiperight(gestureRecognizer: UISwipeGestureRecognizer) {
        //Load Signup view controller here
        let signupHomeViewController: SignupHomeViewController = SignupHomeViewController(nibName: nil, bundle: nil)
        // and push it onto the 'navigation stack'
        self.navigationController?.pushViewController(signupHomeViewController, animated: true)

    }

    }

SignupViewController控制器中的viewDidLoad方法中增加左滑手势。
override func viewDidLoad() {
        super.viewDidLoad()

        let swipeleft: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(SignupViewController.swipeleft(_:)))
        swipeleft.direction = .Left
        self.view!.addGestureRecognizer(swipeleft) 
    }

 func swipeleft(gestureRecognizer: UISwipeGestureRecognizer) {
        //Do what you want here

        //Pop back to login view controller

    }

如何使用导航控制器解决此问题。因为有人告诉我,如果我使用导航控制器来实现它,它会自动工作? - Zhandos.Nurakhmetov
谢谢,但我没有故事板 ;) 我正在使用SnapKit编程实现。 - Zhandos.Nurakhmetov
@Zhandos.Nurakhmetov 没问题,我已经进行了编程更新,以防您不使用故事板。 - swiftBoy

1
根据您的问题,我认为您已经创建了登录页面、注册页面并且能够导航到注册页面。由于您正在使用Navigation Controller,您必须使用push to viewcontroller。您可以在左侧添加一个barbutton,并定义以下操作。
var b = UIBarButtonItem( title: "Back To Login", style: .Plain, target: self, action: "backToLogin:" ) 

func backToLogin(sender: UIBarButtonItem) {
    self.navigationController?.popViewControllerAnimated(true)
 }

对于滑动功能:
var leftGesture = UISwipeGestureRecognizer(target: self, action: Selector("swipeToLogin:")) 
leftGesture.direction = .Left 
self.view.addGestureRecognizer(leftGesture)

func swipeToLogin(sender:UISwipeGestureRecognizer) {

self.navigationController?.popViewControllerAnimated(true)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接