【Swift】Alertボタンから画面遷移を行う方法。
今回の記事ではXcodeの画面遷移の際にAlertボタン(下記)からページ遷移を行う方法について記載いたします。
下記のコードを参照にしています。
参照というかマルパクリ感否めませんがまずはAlertの表示を下記で行い、buttonをクリックするとAlertの表示がされる様にしてみてください。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func test_alert(_ 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
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)
}
}
Alertの説明も記載しているので参考にしてください。
ボタンの「OK」を押せば画面遷移、キャンセルを押せば元のボタンのページに行く様にします。
Alert表示ボタンクリック の処理
Segueを設定します。
設定方法は下記の画面キャプチャをご覧ください。
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
print("OK")
})
まずこの部分に注目です。
この部分は実はボタンを押した後の操作を記載する場所になっています。
ここにSegueを使用して移動する場合の操作は下記の様になります。
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: "test2", sender: nil)
}
print("OK")
})
DispatchQueueはカッコ内以外の処理をストップさせるメソッドになっており、またmainスレッドを指定しています。このmainスレッドはUI操作を行えるスレッドを表しています。
この操作を止めている間にページ遷移を行うというのがこのメソッドの使い方です。
ページ遷移に関しては 、Segueを指定してそのSegueを使用しての移動になっております。
なんだかんだSegueでの移動が見た目もわかりやすく好きです。まあ、ただ慣れているだけなのですが笑。
ちなみにSegueのつなぎ方はボタンから出すのではなく上の丸ボタンから移動さきのページに伸ばします。(下記)
この選択肢はpushを選べば上記の様なbackボタンが出てきます。
その他の遷移気になるかたは入り色試していただきたいのですが特に使うものはモーダルかと思われます。
こちらは現在のスクリーンの上に覆いかぶさる様な感じで、スクリーンのどこまでを覆うか指定もできます。(初期値は上が少しだけ前の画面のままになっていると思われます。)
こちらのモーダル移動の際も先ほどのコードでalertから移動可能です。
Segueの設定のみ変更してください。
またこちらPush移動、モーダル移動両方行っているのでNavigation controllerの場合でもコードに変化がないことはわかっていただけるかと思います。
では後ろのページに戻る場合はどうでしょうか。
Push移動の際はbackボタンを押せば元に戻れます。
ではモーダル移動の場合はどうすれば良いのかというと下記をalertに組み込んでOKをおすと戻れる様になります。
let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
// ボタンが押された時の処理を書く(クロージャ実装)
(action: UIAlertAction!) -> Void in
self.dismiss(animated: true, completion: nil)
print("OK")
})
こちらはSegueを使用せずにページを消去するイメージになっております。
今回の記事は異常です。
alertの操作方法(特にページ移動)についてでした。
コメント
[…] 【Swift】Alertボタンから画面遷移を行う方法。(Navigation Controllerにも対応) […]
[…] 【Swift】Alertボタンから画面遷移を行う方法。(Navigation Controllerにも対応) […]