2017-05-13 6 views
0

ボタンを使用して電話番号を収集し、ボタン機能の下で電話番号を読み取り保存します。Swift:ボタンを使用して保存したデータを別のView Controllerに移動する必要があります。

@IBAction func viewRewardsButtonTapped(_ sender: UIButton) {  
    view.endEditing(true) 
    // Validate format 
    let phoneNumberInput = phoneInput.text 
} 

電話番号phoneNumberInputを保存し、別のUIViewControllerにそれを得るための良い方法はありますか?

UIViewControllerは、@IBAction関数の下に格納された変数を認識することができません。

答えて

0

あなたはUserDefaultsを使用することができます。

// Set phone number 
UserDefaults.standard.set(phoneInput,text, forKey: "phoneNumber") 

// Get phone number 
UserDefaults.standard.string(forKey: "phoneNumber") 

それとも、これを使用するボタンをクリックyou're同時にセグエにしたい場合:

self.performSegue(withIdentifier: "showVC2", sender: phoneNumber.text) 

override func prepare(for segue: UIStoryboardSegue, sender: Any!) { 
    if (segue.identifier == "showVC2") { 
     if let phoneNumber = sender as? String { 
      let vc = segue.destination as! YourSecondVC 
      vc.phoneNumber = phoneNumber 
     } 
    } 
} 

ですから、基本的にセグエを作成し、 2番目のVCのphoneNumberの変数を宣言し、その値を渡すことができます。

+0

を入力するか、初期クラス内のクラスレベルの変数に数値を格納し、後でそのデータをセグの一部として渡します。 – Russell

+0

@Russell、これも代案ですが、私はOPがボタンクリックですぐにセグをしたいと思っていました。 –

+0

ありがとう、私はそれを得た。はい、私はすぐにクリックしたかったのです。私は上記と同様のコードでそれを得た。私はカップルの時間のために立ち往生したが、もちろん、このポストの後15分で、カフェインが最終的に私に当たって、私は再び考え始めた。 – Rawkfist1501

0

phoneNumberInput変数はアクションハンドラメソッドviewRewardsButtonTappedのスコープにのみ格納されるため、このメソッドを放置すると値が失われます。クラスにメンバ変数(var phoneNumber: String?)を追加し、値を格納するためにこれを使用する必要があります。次に、次のView Controllerを開くと、その値をパラメータとして渡すことができます。

私が想定しているストーリーボードセグを使用している場合は、performSegue withIdentifierを実装し、宛先ビューコントローラを具体的なタイプにキャストして値を設定してください(例:targetVC.phoneNumber = self.phoneNumber)。

関連する問題