2015-09-30 106 views
0

回到我的第一個應用程序迅速,我做的/簽了一部分符號,並用視圖控制器基本設計至今都:Swift - 如何從一個視圖控制器轉移到另一個視圖控制器?

歡迎屏幕(登錄/註冊按鈕) - 登錄在 - 註冊 - 主程序

我到了註冊視圖控制器的部分,如果用戶錯過了其中一個必填字段空白,他們點擊按鈕「提交」,他們會被提示並返回到當前的視圖控制器(註冊)填補缺失的領域。現在我想要設置填充所有字段時,我可以使用哪些代碼行,因此當他們點擊「提交」按鈕時,它會回到歡迎屏幕,以便他們可以登錄後?

同樣,我得到了所有的部分來檢查用戶是否輸入正確的用戶名和密碼,所以當他們輸入錯誤的信息時,他們會被提示並攻擊當前的視圖控制器(登錄),以及如何我可以這樣做,如果他們輸入了正確的用戶名 - 密碼,它會前往主程序視圖控制器(第四個)

如果我上面說的是混淆,我會發布我的當前控制器和相關代碼在這裏。任何人有任何想法?再說一次,這是我的第一個程序,所以如果我能從你那裏得到一些幫助,這意味着非常重要。謝謝你的閱讀。

+0

谷歌是你最好的朋友在這裏!只需在iOS中找到有關導航的任何教程。除此之外。也許處理_歡迎屏幕(登錄/註冊按鈕) - 登錄 - 在一個視圖控制器中註冊所有這一切。當你用一個簡單的動畫來顯示和隱藏子視圖時,不需要繼續。 –

+0

你應該檢查'override'方法'shouldPerformSegue',你仍然可以取消segues和'UIView'方法'performSegue',開始一個segue。 – vrwim

+0

正確的函數是'performSegueWithIdentifier(「yourSegueID」,sender:self)'在VC之間創建segges,而不是按鈕的操作。你可以在interfacebuilder中命名它們,並用上面的函數調用它們。 –

回答

2

關於如何做到這一點的一個例子:

import UIKit 

class WelcomeVC: UIViewController { 

    //make it IBAction or call it from IBAction 
    func singInButtonPressed(){ 
     performSegueWithIdentifier("sign in", sender: self) 
    } 
    //make it IBAction or call it from IBAction 
    func singUPButtonPressed(){ 
     performSegueWithIdentifier("sign up", sender: self) 
    } 
} 

class SignUPVC: UIViewController { 
    @IBOutlet var userNameField:UITextField! 
    @IBOutlet var passwordField:UITextField! 

    //make it IBAction or call it from IBAction 
    func submit(){ 
     if checkValidity() { 
      presentingViewController?.dismissViewControllerAnimated(true, completion: nil) 
     } 
    } 

    func checkValidity() ->Bool{ 
     if !userNameField.text!.isEmpty{ 
      if !passwordField.text!.isEmpty { 
       return true 
      } else { 
       //do something to inform passwordfield is missing 
      } 
     } else{ 
      //username field is missing 
     } 
     return false 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "sign in" { 
      if let sINvc = segue.destinationViewController.contentViewController as? SignInVC{ 
       sINvc.username = userNameField.text 
       sINvc.password = passwordField.text 

       //and pass more of the other info you gathered in this vc 
      } 
     } 
    } 

} 
class SignInVC: UIViewController { 

    @IBOutlet var userNameField:UITextField!{ 
     didSet { 
      if username != nil { userNameField.text = username } 
     } 
    } 
    @IBOutlet var passwordField:UITextField! { 
     didSet { 
      if password != nil { passwordField.text = password } 
     } 
    } 

    var password:String? 
    var username:String? 

    //make it IBAction or call it from IBAction 
    func signInPressed(){ 
     if !userNameField.text!.isEmpty && !passwordField.text!.isEmpty { 
      performSegueWithIdentifier("Main page", sender: self) 
     } 
    } 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "Main page"{ 
      //your preparation 
     } 
    } 
} 

//this extension is helpful to avoid typing this everytime there is nav vc in your way of segueing 
extension UIViewController{ 
    var contentViewController: UIViewController { 
     if self is UINavigationController{ 
      if let cvc = (self as! UINavigationController).visibleViewController { return cvc } 
     } 
     return self 
    } 
} 
1
simple way to transfer one view to another in swift is this given below:- 


    let storyboard = UIStoryboard(name: "Main", bundle: nil) 

    //in "Main" your storyboard name 


    let secondViewController = storyboard.instantiateViewControllerWithIdentifier("LoginPage") as! UIViewController 

    //in place of Login Page your storyboard identifier name 

    navigationController?.pushViewController(secondViewController, animated: true) 
0
let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
let mainTabBar = storyBoard.instantiateViewController(withIdentifier: "MainTabBar") as! UITabBarController 
self.navigationController?.pushViewController(mainTabBar, animated: true) 

爲我工作。謝謝!更新的迅速3.1和Xcode 8.3.2

相關問題