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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

1394閲覧

UIAlertController内に表示されているViewを取得したい

_utah

総合スコア20

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/21 05:45

編集2017/08/21 06:40

###前提・実現したいこと
UIAlertControllerを使用して、モーダルを表示しています。

そこで、UIActivityIndicatorViewを使用し、「ロード中です」的な表示をしたいと思っています。

現在の状況は、インジケーターは表示できるとことまでは出来ていますが、インジケーターの表示位置の調整が難しく、困っています。

UIAlertControllerに表示されているView(UIAlertController.viewの中にあるもの)が取得できれば、Viewの大きさから表示位置を指定できると思い、Viewを取得しようと思ったのですが、方法が分かりません。

また、UIAlertController.view.addSubviewで追加されたUIActivityIndicatorViewの初期位置は、UIAlertController.viewの中にあるものが基準になっていますが、UIAlertController.viewをprintして表示される値は、そのまま画面サイズになりますので使用できません。

実現したいことは、UIAlertControllerに表示されているView(UIAlertController.viewの中にあるもの)を取得し、そこからUIActivityIndicatorViewの位置を変更したいです。

###発生している問題・エラーメッセージ
UIAlertControllerに表示されているViewの取得の方法が分からない。

###該当のソースコード

swift

1 var alretBtn : UIButton = UIButton() 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 alretBtn.frame = CGRect(x: 0, y: 0, width: 200, height: 100) 7 alretBtn.setTitle("アラート表示", for: .normal) 8 alretBtn.setTitleColor(UIColor.blue, for: .normal) 9 alretBtn.addTarget(self, action: Selector("bottonTapped"), for: .touchDown) 10 11 view.addSubview(alretBtn) 12 }

swift

1 func bottonTapped(){ 2 3 // アラート 4 let alert = UIAlertController( 5 title: "アラート表示中", 6 message: "", 7 preferredStyle: UIAlertControllerStyle.alert 8 ) 9 10 // OKボタン 11 let ok = UIAlertAction( 12 title: "OK", 13 style: UIAlertActionStyle.default, 14 handler: nil 15 ) 16 alert.addAction(ok) 17 18 // インジケーター 19 let indicateView : UIActivityIndicatorView = UIActivityIndicatorView() 20 indicateView.activityIndicatorViewStyle = .gray 21 indicateView.center = CGPoint(x: 0, y: 0) 22 23 // アラート表示中の右側に表示したい 24 // indicateView.center = CGPoint(x: alert.view.bounds.width * 0.9, y: alert.view.bounds.height / 2) 25 26 // サイズを表示 27 // print(alert.view.frame) ←画面全体の大きさが取得される 28 // print(alert.view.bounds) ←画面全体の大きさが取得される 29 30 // アニメージョンスタート 31 indicateView.startAnimating() 32 33 // アラートのビューに追加 34 alert.view.addSubview(indicateView) 35 36 // アラート表示 37 present(alert, animated: true, completion: nil) 38 }

###画像
イメージ説明

###試したこと
indicateView.center = CGPoint(x: alert.view.bounds.width * 0.9, y: alert.view.bounds.height / 2)等で移動してみて、alert.viewが取得したいものではないことを確認しましたが、そこからどうすればいいか分かりません。

###補足情報(言語/FW/ツール等のバージョンなど)
xcode8.2.1
swift3

###解決方法

swift

1 // アラート表示 2 present(alert, animated: true){ 3 completion in 4 5 // 位置の変更 6 // alert.viewに表示位置が入っている 7 indicateView.center = CGPoint(x: alert.view.bounds.width * 0.85, y: alert.view.bounds.height / 2) 8 9 // アニメージョンスタートはこのタイミングで呼ぶ() 10 indicateView.startAnimating() 11 }

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

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

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

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

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

guest

回答2

0

参考サイトは「UIAlertController内の文字を左寄せにする」ものですが、
このコードを使えば文字の位置が分かるかもしれません。
未検証で申し訳ないです。

http://qiita.com/dotwhim/items/2458c2cb9161a10a3f28

投稿2017/08/21 06:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

まだ座標やサイズが設定されていないだけです。
present(_:animated:completion:)のcompletionの中で座標/サイズを取得して下さい。

投稿2017/08/21 06:20

fuzzball

総合スコア16731

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

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

_utah

2017/08/21 06:42

ありがとうございます。 おかげで解決することが出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問