Alert画面での画面遷移で変数の受け渡しを行う方法。
前回の記事でAlert表示にて画面繊維を行う方法について記載いたしました。
その続きというかよく一緒に利用されるであろう、変数の受け渡しをAlert画面を用いて行って見ましょう。
前回の記事は下記ですのでAlertでの画面遷移方法は下記記事を参照ください。
この記事にある様にコードは下記にしておいてください。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func test1(_ sender: Any) {
let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか?", preferredStyle: UIAlertController.Style.alert)
// ② Actionの設定
// Action初期化時にタイトル, スタイル, 押された時に実行されるハンドラを指定する
// 第3引数のUIAlertActionStyleでボタンのスタイルを指定する
// OKボタン
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// 0.5秒後に実行したい処理
self.performSegue(withIdentifier: "test_segue1", sender: nil)
}
print("OK")
})
// キャンセルボタン
let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
print("Cancel")
})
// ③ UIAlertControllerにActionを追加
alert.addAction(cancelAction)
alert.addAction(defaultAction)
// ④ Alertを表示
present(alert, animated: true, completion: nil)
}
}
Segueのidは上記コードのtest_segue1に設定しております。XcodeのSegueのマーク(viewControllerを繋いでいる四角い小さいやつ)をクリックして、右側の設定画面にて設定してください。
まずはこのコードに下記を追記してください。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
// /////////追記場所/////////////////////////////////////
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let test_word = "test"
// segueのIDを確認して特定のsegueのときのみ動作させる
if segue.identifier == "test_segue1" {
// 2. 遷移先のViewControllerを取得
let next = segue.destination as? test2ViewController
// 3. 1で用意した遷移先の変数に値を渡す
next?.outputValue = test_word
}
}
// /////////////////////////////////////////////////////
@IBAction func test1(_ sender: Any) {
let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか?", preferredStyle: UIAlertController.Style.alert)
// ② Actionの設定
// Action初期化時にタイトル, スタイル, 押された時に実行されるハンドラを指定する
// 第3引数のUIAlertActionStyleでボタンのスタイルを指定する
// OKボタン
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
// 0.5秒後に実行したい処理
self.performSegue(withIdentifier: "test_segue1", sender: nil)
}
print("OK")
})
// キャンセルボタン
let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
print("Cancel")
})
// ③ UIAlertControllerにActionを追加
alert.addAction(cancelAction)
alert.addAction(defaultAction)
// ④ Alertを表示
present(alert, animated: true, completion: nil)
}
}
super.viewDidLoad()のすぐ下に別の関数として次のページにあたるviewcontrollerに行くためのSegueを探して次のviewcontrollerをインスタンス化しています。
そのインスタンス化したもののなかの変数にこちらの元ページのviewcontrolleから取ってきた変数値を代入しているという流れです。
もちろん次のページ用のviewcontrollerにも設定を記載する必要はあります。
import UIKit
class test2ViewController: UIViewController {
@IBOutlet weak var test_label0: UILabel!
var outputValue : String?
override func viewDidLoad() {
super.viewDidLoad()
test_label0.text = outputValue
// Do any additional setup after loading the view.
}
class名も先ほどのコードに合わせます。
これで別ファイル間での変数を渡すことができています。
コメント