質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

2995閲覧

UIAlertControllerの外部ファイル化の方法

todayske

総合スコア36

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

2クリップ

投稿2016/04/23 07:54

Xcodeでアプリを作っていて、たくさんアラートを表示するので、アラート部分のみを外部のSwiftファイル化してViewControllerから呼びたいと考えています。
以下のように外部ファイルを作成したところ、エラーが出てしまいます。

検索しても解決することができず、困っております。
どなたか解決法をご存知の方がいらっしゃればご教示いただけますと大変助かります。
よろしくお願いいたします。


外部Swiftファイル

Swift

1import Foundation 2 3class Alert: UIAlertController { 4 class func show(alertNum : Int) { 5 var alert = UIAlertController(title: "", message: "", preferredStyle: .Alert) 6 switch alertNum{ 7 //チュートリアル 8 case 1: 9 alert = UIAlertController(title: "タイトル", message: "エラー出ませんように", preferredStyle: .Alert) 10 let actionCancel = UIAlertAction(title: "キャンセル", style: .Cancel) { 11 action in print("Pushed CANCEL!") 12 } 13 alert.addAction(actionCancel) 14 break 15 default: 16 break 17 } 18 presentViewController(alert, animated: true, completion: nil) //ここでエラーが出ます。"Extra argument 'animated' in call" 19 } 20}

エラー文

Extra argument 'animated' in call

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

メソッドclass func show(alertNum : Int)の引数に表示するViewControllerのインスタンスを
渡してあげてることで解決できます。

class func show(alertNum : Int, viewController: UIViewController)
のような感じです。

あとファイルをわけるのであれば、Alertクラスにimport UIKitも必要です。
以下コードになります。

画面クラス

swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 } 8 9 override func viewDidAppear(animated: Bool) { 10 super.viewDidAppear(animated) 11 12 // Alertを表示する 13 Alert.show(1, viewController: self) 14 } 15}

アラートクラス

swift

1import Foundation 2import UIKit 3 4class Alert: UIAlertController { 5 6 class func show(alertNum : Int, viewController: UIViewController) { 7 var alert = UIAlertController(title: "", message: "", preferredStyle: .Alert) 8 switch alertNum{ 9 //チュートリアル 10 case 1: 11 alert = UIAlertController(title: "タイトル", message: "エラー出ませんように", preferredStyle: .Alert) 12 let actionCancel = UIAlertAction(title: "キャンセル", style: .Cancel) { 13 action in print("Pushed CANCEL!") 14 } 15 alert.addAction(actionCancel) 16 break 17 default: 18 break 19 } 20 // 引数で渡されてきたViewControllerに対してメソッドを実行します。 21 viewController.presentViewController(alert, animated: true, completion: nil) 22 } 23} 24

投稿2016/04/24 00:53

編集2016/04/24 00:53
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

todayske

2016/04/24 02:26

できました! UIKitやFoundationフレームワークも理解していなかったので、調べてみたら一層理解が深まりました。とっても勉強になりました。 ありがとうございます!!
guest

0

presentViewController()は、Alertを生成したViewControllerが実行しないといけません。

投稿2016/04/23 08:12

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

todayske

2016/04/24 02:23

ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問