2017-10-10 1 views
0

私は私のサインアップとストーリーボードのログイン両方のための迅速なファイルを持っていますが、もちろん異なるビューコントローラ...私の問題は、私がそれを実行すると何も起こらない、例えば私は私のログイン画面にアクセスし、テキストフィールドに情報がなくても私のアプリのメイン画面に移動します。これは、画面に情報を入力するかどうかにかかわらず発生します。だから私の推測は、このコードをすべてスキップしなければならないことを意味するものではありません。申し訳ありませんが使用する間違った用語です。自分のテキストフィールドをIBOutletsに接続して、この素早いファイルと同様にプロジェクトにFirebaseをインポートします。私はXcode 9.1 beta 2を使用しています。どんなフィードバックも大変ありがとうございます。すべてのコードを入力した後、Xcodeはfirebaseのログインを完全にスキップしますか?

import Foundation 
import UIKit 
import FirebaseAuth 

class SignUpandLoginController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

@IBAction func goWhenPressed(_ sender: UIButton) { 

    performSegue(withIdentifier: "goLoginTabControl", sender: self) 
} 
@IBOutlet weak var myImageSignUpView: UIImageView! 

@IBAction func importImage(_ sender: AnyObject) 
{ 
    let image = UIImagePickerController() 
    image.delegate = self 

    image.sourceType = UIImagePickerControllerSourceType.photoLibrary 

    image.allowsEditing = false 

    self.present(image, animated: true) 
    { 
     //After it is complete 
    } 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    { 
     myImageSignUpView.image = image 
    } 
    else 
    { 
     //Error message 
    } 

    self.dismiss(animated: true, completion: nil) 
} 

@IBOutlet weak var firstNameSignUp: UITextField? 

@IBOutlet weak var lastNameSignUp: UITextField? 

@IBOutlet weak var usernameSignUp: UITextField? 

@IBOutlet weak var emailSignUp: UITextField? 

@IBOutlet weak var passwordSignUp: UITextField? 

@IBOutlet weak var retypePasswordSignUp: UITextField? 

@IBOutlet weak var usernameLogin: UITextField! //! 

@IBOutlet weak var passwordLogin: UITextField! //! 

@IBOutlet weak var segmentControl: UISegmentedControl! 

@IBOutlet weak var actionButton: UIButton! 

func action(_ sender: UIButton) { 





    guard let username = self.usernameLogin.text else { return } 
    guard let password = self.passwordLogin.text else { return } 

    func viewDidLoad() { 
     super.viewDidLoad() 

      Auth.auth().signIn(withEmail: username, password: password, completion: { (user, error) in if user != nil 
      { 
       //Sign in successful 
       print("SUCCESS") 
      } 
      else 
      { 
       if let myError = error?.localizedDescription 
       { 
        print(myError) 
       } 
       else 
       { 
        print("ERROR") 
       } 
      } 
     }) 


//create user 


Auth.auth().createUser(withEmail: username, password: password, completion: { (user, error) in if user != nil 
      { 
       print("SUCCESS") 
      } 
      else 
      { 
       if let myError = error?.localizedDescription 
       { 
        print(myError) 
       } 
       else 
       { 
        print("ERROR") 
       } 
      } 
     }) 
    } 


self.firstNameSignUp?.delegate = self 
self.lastNameSignUp?.delegate = self 
self.usernameSignUp?.delegate = self 
self.emailSignUp?.delegate = self 
self.passwordSignUp?.delegate = self 
self.retypePasswordSignUp?.delegate = self 
self.usernameLogin?.delegate = self 
self.passwordLogin?.delegate = self 


} 

//Hide keybaord when user touches outside keyboard 
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
self.view.endEditing(true) 
} 

//Presses return key 
func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
textField.resignFirstResponder() 
return(true) 
} 



} 

答えて

0

あなたはおそらくも、この@IBAction@IBAction func action(_ sender: UIButton)に接続されているボタンを使用して次の画面を提示する/表示しているからです。何が起こる

は、プログラムがアップし、あなたのFirebase要求の完了のための符号を待ってサインインしないということである。

は何をする必要があると次の画面にボタンを切断することです。 sequeことを削除し、代わりに、下の画像のように、第2のビューコントローラにご最初のビューコントローラを接続します。その後

enter image description here

、あなたがちょうどした新しいsegueからidentifierを与えます製。その後、サインアップ成功ブロックサインイン成功ブロック内でperform Segue関数を使用する必要があります。

+0

基本的に「ログイン」ボタンであるボタンを切断し、ビュー・コントローラーをログイン・ボタンの代わりにメイン・アプリケーション・ビューにドラッグする必要があると言っていますか? –

+0

正しい。 2番目の画面に直接接続されているボタンを切断します。次に、代わりに最初の画面を画面に接続します。 'segue'の識別子に何かをつけて、signinとsigupの成功ブロックの中に' performSegue'という関数を入れてください。 – Glenn

+0

これは愚かな質問のように見えるかもしれませんが、私はどのように素早いファイルの中でpreformSegueをやりますか?申し訳ありません...私はSwiftで新しいです。 –

関連する問題