前提・実装したいこと
Xcodeで簡単なカードゲームアプリを作っているのですが、全ての画面にタイトルへ戻るボタンを表示しています。
ボタンを押してタイトルに戻る際には一度アラートを表示させてから画面遷移が行うようにしたいと思い、アラートを表示して画面遷移する関数を作成したのですが、タイトル画面以外全ての画面に実装するため、できれば別ファイルを作成し、一つのクラスにまとめて毎回書かなくてもいいようにしたいと思っています。
そこでTitleBackBtnというクラスを作ったのですが、エラーが発生し、うまく動作しません。
コード中盤の
self.present(vc, animated: true, completion: nil)
に「Value of type 'TitleBackBtn' has no member 'present'」というエラーが
最後の行の
present(alert, animated: true, completion: nil)
に「cannot find 'present' in scope」というエラーが出ています。
それぞれの画面のViewControllerの中に関数を書いた場合は動作するため、エラーメッセージからおそらくViewControllerの指定の仕方がselfではないのだとは思うのですが、自身では解決方法が見つかりませんでした。
Swift初心者用の書籍を1冊読み終えたばかりで、エラーが発生しているコード以前にクラス作りの基本的な部分が抜けている可能性もあり、大変申し訳ないのですが、解決方法をご存知の方がいらっしゃればご教授いただけると幸いです。
該当のソースコード
Swift
1import Foundation 2import UIKit 3 4 5 6class TitleBackBtn{ 7 8 //アラートボタン 9 func titleAlert(){ 10 //アラートボタンのタイトルと本文の表示 11 let alert: UIAlertController = UIAlertController(title: "タイトルへ戻る", message: "タイトル画面へ戻ってもよろしいですか?", preferredStyle: UIAlertController.Style.alert) 12 13 //OKボタンの表示と押された時の処理 14 let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{ 15 //OKボタンが押された時の処理 16 (action: UIAlertAction!) -> Void in 17 print("OK") 18 let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 19 let vc = storyboard.instantiateViewController(withIdentifier: "titleView") as! ViewController 20 self.present(vc, animated: true, completion: nil) 21 }) 22 //キャンセルボタンの表示と押された時の処理 23 let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{ 24 //キャンセルボタンが押された時の処理 25 (action: UIAlertAction!) -> Void in 26 print("Cancel") 27 }) 28 29 //UIAlertControllerにActionを追加 30 alert.addAction(cancelAction) 31 alert.addAction(defaultAction) 32 33 //Alertを表示 34 present(alert, animated: true, completion: nil) 35 } 36}
回答1件
あなたの回答
tips
プレビュー