iPadでUIAlertControllerのActionSheetが落ちる問題
上記のサイトを参考にしてiPad Pro(シュミレーター)
でActionSheet
を表示するところまで確認しました。
swift
1 import UIKit
2
3 class ViewController : UIViewController , UIImagePickerControllerDelegate , UINavigationControllerDelegate {
4
5 override func viewDidLoad ( ) {
6 super . viewDidLoad ( )
7
8 }
9
10 // UIBarButtonItemを押下時
11 @IBAction func pushItem ( sender : UIBarButtonItem ) {
12
13 //UIImagePickerControllerを使うための定数
14 let pickerController = UIImagePickerController ( )
15 //UIImagePickerControllerのデリゲートメソッドを使用する設定
16 pickerController . delegate = self
17 //UIAcionSheetを使うための定数を作成
18 let sheet = UIAlertController ( title : nil , message : nil , preferredStyle : . ActionSheet )
19
20 //ボタンタイトルをNSLocalizedStringに変更
21 let cancelString = NSLocalizedString ( "Cancel" , comment : "キャンセル" )
22 let cameraString = NSLocalizedString ( "Camera" , comment : "カメラ" )
23 let libraryString = NSLocalizedString ( "Library" , comment : "ライブラリ" )
24 //3つのアクションボタンの定数を作成
25 let cancelAction = UIAlertAction ( title : cancelString , style : . Default , handler : { ( action ) - > Void in } )
26 let cameraAction = UIAlertAction ( title : cameraString , style : . Default , handler : { ( action ) - > Void in
27 pickerController . sourceType = . Camera
28 self . presentViewController ( pickerController , animated : true , completion : nil ) } )
29 let LibraryAction = UIAlertAction ( title : libraryString , style : . Default , handler : { ( action ) - > Void in
30 pickerController . sourceType = . PhotoLibrary
31 self . presentViewController ( pickerController , animated : true , completion : nil ) } )
32
33
34 //アクションシートにアクションボタンを追加
35 sheet . addAction ( cancelAction )
36 sheet . addAction ( cameraAction )
37 sheet . addAction ( LibraryAction )
38
39 //アクションシートを表示
40 sheet . popoverPresentationController ? . sourceView = view
41 sheet . popoverPresentationController ? . barButtonItem = sender
42
43 self . presentViewController ( sheet , animated : true , completion : nil )
44 }
45
46 // UIButtonを押下時
47 @IBAction func cameraTapped ( sender : UIButton ) {
48
49 //UIImagePickerControllerを使うための定数
50 let pickerController = UIImagePickerController ( )
51 //UIImagePickerControllerのデリゲートメソッドを使用する設定
52 pickerController . delegate = self
53 //UIAcionSheetを使うための定数を作成
54 let sheet = UIAlertController ( title : nil , message : nil , preferredStyle : . ActionSheet )
55 //ボタンタイトルをNSLocalizedStringに変更
56 let cancelString = NSLocalizedString ( "Cancel" , comment : "キャンセル" )
57 let cameraString = NSLocalizedString ( "Camera" , comment : "カメラ" )
58 let libraryString = NSLocalizedString ( "Library" , comment : "ライブラリ" )
59 //3つのアクションボタンの定数を作成
60 let cancelAction = UIAlertAction ( title : cancelString , style : . Default , handler : { ( action ) - > Void in } )
61 let cameraAction = UIAlertAction ( title : cameraString , style : . Default , handler : { ( action ) - > Void in
62 pickerController . sourceType = . Camera
63 self . presentViewController ( pickerController , animated : true , completion : nil ) } )
64 let LibraryAction = UIAlertAction ( title : libraryString , style : . Default , handler : { ( action ) - > Void in
65 pickerController . sourceType = . PhotoLibrary
66 self . presentViewController ( pickerController , animated : true , completion : nil ) } )
67
68
69 //アクションシートにアクションボタンを追加
70 sheet . addAction ( cancelAction )
71 sheet . addAction ( cameraAction )
72 sheet . addAction ( LibraryAction )
73
74 //アクションシートを表示
75 sheet . popoverPresentationController ? . sourceView = view
76 sheet . popoverPresentationController ? . sourceRect = sender . frame
77
78 self . presentViewController ( sheet , animated : true , completion : nil )
79
80 }
81 }
ボタンのIBAction
を結ぶときは以下のようにArguments
をSender
に設定してみてください。
UIBarbuttonItem
にarguments
を設定することで引数にUIBarbuttonItem
自身のオブジェクトが渡されてきます。(UIButton
の場合も同じ)
そのオブジェクトに対してアクションシートの位置を設定したりしたり、Buttonのtagで処理を分けたりします。
@IBAction fund メソッド名(sender: UIBarButtonItem)
swift
1 @IBAction fund メソッド名 ( sender : UIButton ) {
2 if sender . tag == 1 {
3 // Buttonのtagが1の場合の処理
4 } else if sender . tag == 2 {
5 // Buttonのtagが2の場合の処理
6 }
7 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/17 00:51
2016/07/17 05:15
2016/07/17 07:13