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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

2504閲覧

alerttextとpickerについて

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2018/01/01 02:20

編集2018/01/03 02:10

swift

1@IBAction func btr(_ sender: Any) { 2 let alert = UIAlertController(title: "値を入力してください", message: "\n\n\n\n\n\n\n\n", preferredStyle: .alert) 3 // テキストフィールドを追加 4 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 5 textField.placeholder = "買ったもの" 6 }) 7 //二個目 8 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 9 textField.placeholder = "金額" 10 }) 11 12 let saveAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) -> Void in 13 self.mytableView.reloadData() 14 } 15 let cancelAction = UIAlertAction(title: "キャンセル", style: .default) { (action:UIAlertAction!) -> Void in 16 } 17 18 //PickerView 19 pickerView = UIPickerView(frame:CGRect(x:0, y:50, width:view.bounds.width*0.6, height:150)) // 配置、サイズ 20 pickerView.frame = CGRect(x:0, y:0, width:view.bounds.width, height:150) 21 pickerView.dataSource = self 22 pickerView.delegate = self 23 alert.view.addSubview(pickerView) 24 25 alert.addAction(saveAction) 26 alert.addAction(cancelAction) 27 present(alert, animated: true, completion: nil) 28 }

イメージ説明

やりたいこと
pickerとtextFieldの位置を上下逆にしたいです。
それとtextFieldを複数にするとこういったくっついた形になってしまうのですがそ

自分出来たところ
alert内にpickerと追加でtextFieldまでを設置するところまで出来た

困っているところ
alert内にpickerとtextを上下逆にしたいのですがどうすればいいか分からなくて困っています。
それとalert内のtextFieldとpickerViewの間の隙間を出来るだけ無くしたいです。

versionはswift4で開発しています。

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

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

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

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

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

komo_ta

2018/01/01 03:03

「イメージとしてはtextで数字を入力し、pickerは値を入力できるようにしたい。」ここの部分がイメージつかなかったんですが、入力というのはtextFieldを使うってことでしょうか?もしくは値を表示させるという意味で入力と言ってますか?軽くでもいいので、その画面の簡単な図みたいなものがあればアドバイスできるかもです。
退会済みユーザー

退会済みユーザー

2018/01/02 06:09

私の説明不足でやりたいことをお伝え出来なくてすいません。質問内容を編集したのでもし宜しければもう一度見ていただけないでしょうか?
komo_ta

2018/01/02 14:20

修正ありがとうございます。確認したいことが2点あるのですが、①TextFieldは入力するインターフェースだと思うのですが、PickerViewを入れるのはなぜでしょうか?②修正で追加していただいた画像あると思うのですが、こちらはUIAlertControllerかどうかわかりますか?見た感じカスタムで作ってあるようなViewにも見えるので。。。
退会済みユーザー

退会済みユーザー

2018/01/02 17:44

textFieldにpickerを入れる理由としてはユーザー自身の入力する手間を出来るだけ省きたいのでpickerViewを設置してみようというのが経緯になります。基本的に私が想定している事としてはpickerはそんなに使用頻度の高いものではなくオプションとして単位を変更したい時だけ使ってもらうのを想定しています。
退会済みユーザー

退会済みユーザー

2018/01/02 17:47

2点目の関しては確認してみましたがおそらくalert内で作れられているものだと思います。ですが2点目に関しては私の自己満足ですので出来なくも大丈夫です。
guest

回答2

0

ベストアンサー

他の方も回答しているように UIAlertController で実現するには盛り込みすぎな気がするので、例えば、 iOS 標準の Alarm のようなインタフェースなど検討してみてはいかがでしょうか?

Github に Alarm の Swift 実装を見かけたので、このようなイメージを参考にしてみるのも良いかと思います。

Alarm-ios-swift

投稿2018/01/06 17:25

ykws

総合スコア1236

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

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

退会済みユーザー

退会済みユーザー

2018/02/16 09:41

カスタムのアラートを作るためにxibを利用してやっているのですがその過程でエラーが起きてしまって自分なりに色々試してみたのですがどうしても出来ないのでもし宜しければ教えて頂けないでしょうか? https://teratail.com/questions/113793
guest

0

調べてみましたが、難しいかと思います。UIAlertControllerのPopupしてくるViewに対して設置できるUI部品はaddTextField~によって追加できるtextFieldくらいで、他は厳しいかと思います。そのTextFieldの位置に関しても、色々試しましたが位置を取得することができないので、こちらで位置を制御することはできなそうでした。そちらのpickerViewに関しても、UIAlertControllerそのもののviewプロパティに載せているので、おそらく階層的には、おかしなことになっているのではないかと思います。(debug view hierarlchyしていただければわかるかと思います。)

UIAlertControllerクラスを見ましたが、popupしてくるViewのプロパティがなさそうです

UIAlertController.h

// // UIAlertController.h // UIKit // // Copyright (c) 2014-2017 Apple Inc. All rights reserved. // @available(iOS 8.0, *) public enum UIAlertActionStyle : Int { case `default` case cancel case destructive } @available(iOS 8.0, *) public enum UIAlertControllerStyle : Int { case actionSheet case alert } @available(iOS 8.0, *) open class UIAlertAction : NSObject, NSCopying { public convenience init(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil) open var title: String? { get } open var style: UIAlertActionStyle { get } open var isEnabled: Bool } @available(iOS 8.0, *) open class UIAlertController : UIViewController { public convenience init(title: String?, message: String?, preferredStyle: UIAlertControllerStyle) open func addAction(_ action: UIAlertAction) open var actions: [UIAlertAction] { get } @available(iOS 9.0, *) open var preferredAction: UIAlertAction? open func addTextField(configurationHandler: ((UITextField) -> Swift.Void)? = nil) open var textFields: [UITextField]? { get } open var title: String? open var message: String? open var preferredStyle: UIAlertControllerStyle { get } } extension UIAlertController : UISpringLoadedInteractionSupporting { }

uialertController

なので自分だったら、カスタムでViewを作成するか、そもそものインターフェースを見直すかなと思います。

投稿2018/01/03 11:57

komo_ta

総合スコア275

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問