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

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

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

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

Q&A

解決済

1回答

1002閲覧

【swift】DKImagePickerControllerBaseUIDelegate について

konakizzi_mk

総合スコア21

Swift

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

0グッド

0クリップ

投稿2021/03/15 05:23

編集2021/03/15 06:49

##実現したいこと
DKImagePickerControllerライブラリのUIカスタマイズをしたい。
<現状>
maxSelectableCountを指定し、指定したカウントが超えてしまった際デフォルトで設定されている以下のアラートが表示される。

title:選択可能枚数に到達しました
message:〜枚まで選択することができます
※〜には添付可能枚数の残りの数字が表示されます。

<やりたいこと>
アラートのmessage内容はこのままで、title部分の内容を変更したい。

swift

1import UIKit 2import DKImagePickerController 3 4class PictureViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 5 6 var assets:[DKAsset]? 7 8 9 @IBOutlet weak var collectionView: UICollectionView! 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 } 16 @IBAction func tapButton(_ sender: Any) { 17 let pickerController = DKImagePickerController() 18 pickerController.maxSelectableCount = 4 - (assets?.count ?? 0) 19 pickerController.UIDelegate = CustumUIDelegate() 20 pickerController.didSelectAssets = { [unowned self] (assets: [DKAsset]) in 21 22 self.assets = assets 23 self.collectionView.reloadData() 24 25 } 26 present(pickerController, animated: true, completion: nil) 27 } 28 29 30 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 31 return self.assets?.count ?? 0 32 } 33 34 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 35 let asset = self.assets![indexPath.row] 36 var cell: UICollectionViewCell? 37 var imageView: UIImageView? 38 39 if asset.type == .photo { 40 cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CellImage", for: indexPath) 41 imageView = cell?.contentView.viewWithTag(1) as? UIImageView 42 } 43 44 if let imageView = imageView { 45 46 asset.fetchFullScreenImage(completeBlock: { image, info in 47 imageView.image = image 48 49 }) 50 } 51 return cell! 52 } 53 54 55 56}

swift

1import DKImagePickerController 2 3class CustumUIDelegate: DKImagePickerControllerBaseUIDelegate { 4 override func imagePickerControllerDidReachMaxLimit(_ imagePickerController: DKImagePickerController) { 5 let formatter = NumberFormatter() 6 formatter.numberStyle = .decimal 7 formatter.locale = Locale(identifier: Locale.current.identifier) 8 9 let formattedMaxSelectableCount = formatter.string(from: NSNumber(value: imagePickerController.maxSelectableCount)) 10 11 let alert = UIAlertController.init(title: "最大4枚まで添付することができます", message: (formattedMaxSelectableCount)枚まで選択できます", preferredStyle: .alert) 12 let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel, handler: nil) 13 alert.addAction(okAction) 14 imagePickerController.present(alert, animated: true, completion: nil) 15 } 16} 17

上記を実行すると以下のようにアラートが表示されてしまい、message内容がカスタマイズ前と同じものが表示されない。
title:最大4枚まで添付することができます
message:Optional(~)枚まで選択できます"
※〜には添付可能枚数の残りの数字が表示されます。

以下DKImagePickerControllerBaseUIDelegateクラスimagePickerControllerDidReachMaxLimitメソッド部分参考↓

swift

1//DKImagePickerControllerBaseUIDelegateクラスのimagePickerControllerDidReachMaxLimitメソッド部分 2open func imagePickerControllerDidReachMaxLimit(_ imagePickerController: DKImagePickerController) { 3 let formatter = NumberFormatter() 4 formatter.numberStyle = .decimal 5 formatter.locale = Locale(identifier: Locale.current.identifier) 6 7 let formattedMaxSelectableCount = formatter.string(from: NSNumber(value: imagePickerController.maxSelectableCount)) 8 9 let alert = UIAlertController(title: DKImagePickerControllerResource.localizedStringWithKey("picker.select.maxLimitReached.error.title"), message: nil, preferredStyle: .alert) 10 11 alert.message = String(format: DKImagePickerControllerResource.localizedStringWithKey("picker.select.maxLimitReached.error.message"), formattedMaxSelectableCount ?? imagePickerController.maxSelectableCount) 12 13 alert.addAction(UIAlertAction(title: DKImagePickerControllerResource.localizedStringWithKey("picker.alert.ok"), style: .cancel) { _ in }) 14 15 imagePickerController.present(alert, animated: true) 16 }

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

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

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

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

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

TsukubaDepot

2021/03/15 05:34

> アラートのmessage内容はこのままで、title部分の内容を変更したいが、title部分を変更することによってデフォルトで設定されていたmessage内容を取得できなくなってしまったのでどうやったら取得できるかご教示いただきたい。 この部分の意図がよく汲み取れないのですが、具体的に生じた不都合は何なのでしょうか。 「title 部分を変更することによって、デフォルトで設定されていた message 内容を取得できなくなってしまった」とありますが、「message 内容を取得する」に相当するコードが見当たらないので、問題点が明確でないように感じています。 (Optionalとつくことが問題なのかとおもいましたが、おそらくそうではないと思っています)
konakizzi_mk

2021/03/15 05:46

わかりにくい説明で申し訳ございません???? > この部分の意図がよく汲み取れないのですが、具体的に生じた不都合は何なのでしょうか。 →もともとアラート表示に関してカスタマイズはしておらず、ライブラリに入っているアラートが表示されていました。しかし今回アラートのtitleだけをカスタマイズし、message内容はデフォルト設定されているものと同じものを表示させたいです。
TsukubaDepot

2021/03/15 05:48

「しかし今回アラートのtitleだけをカスタマイズし」ということであれば、 > let alert = UIAlertController.init(title: "最大4枚まで添付することができます", message: \(formattedMaxSelectableCount)枚まで選択できます", preferredStyle: .alert) ここの title 以降の文字列(「最大4枚まで添付することができます」の部分)を変更する、ということとはまた違ったことを実現されたいのでしょうか
konakizzi_mk

2021/03/15 05:51

ライブラリに入っているアラート(アラートに関して何もカスタマイズしていない状態)のとき、 title:選択可能枚数に到達しました message:〜枚まで選択することができます ※〜には添付可能枚数の残りの数字が表示されます。 が表示され、今回以下にカスタマイズしたいという意味でした。???? title:最大4枚まで添付することができます message:〜枚まで選択することができます ※〜には添付可能枚数の残りの数字が表示されます。
TsukubaDepot

2021/03/15 06:32

maxSelectableCount というプロパティで最大取得枚数を設定できるので、それを使って計算すれば良いのではないでしょうか。 ところで、掲載されているコードを改めて拝見していて気づいたのですが、DKImagePickerController を継承してカスタムクラスを作ろうとされているんですね(Qiitaか何かの記事を参考にされているのでしょうか)。 そうなると、検証するのはちょっと今すぐできないので、まずは上記のプロパティを参照して確かめて見られてはいかがでしょうか。
konakizzi_mk

2021/03/15 07:07

\(formattedMaxSelectableCount)を\(imagePickerController.maxSelectableCount)にしたらできました????お騒がせしました????
TsukubaDepot

2021/03/15 09:53

解決できたようでよかったです。 このままだとご質問が未解決で残ってしまうため、自己解決していただけませんでしょうか。 よろしくお願いいたします。
guest

回答1

0

自己解決

(formattedMaxSelectableCount)(imagePickerController.maxSelectableCount)にし、実現したいことが再現できました。

投稿2021/03/15 09:57

konakizzi_mk

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問