UIAlertController
にUIImageView
を含むアラートをActionSheet
に表示させたい。しかし、アプリケーションを実行すると、アプリケーションが終了します。
これは私のコードです:
UIAlertController *alert = [UIAlertController
alertControllerWithTitle:@"Title"
message:@"Welcome"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okButton = [UIAlertAction
actionWithTitle:OK
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
{
}];
[alert addAction:okButton];
UIImageView *imgv = [[UIImageView alloc]initWithFrame:CGRectMake(20,20,50,50)];
imgv.image = [UIImage imageNamed:@"kaga.jpg"];
[alert setValue:imgv forKey:@"image"];
[self presentViewController:alert animated:YES completion:nil];
Apple Doc。に従って、UIAlertController
に画像を追加することはできません。
必要に応じて、次のような独自のカスタムビューを作成できます。
https://github.com/wimagguc/ios-custom-alertview
button
に表示される画像を撮りたい場合は、次のようにしてください。
UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Title"
message:@"Welcome"
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* okButton = [UIAlertAction actionWithTitle:@"OK"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * action) {
//Do some thing here
}];
[okButton setValue:[[UIImage imageNamed:@"kaga.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];
[alert addAction:okButton];
[self presentViewController:alert animated:YES completion:nil];
UIAlertController
をサブクラス化し、_\n
_をタイトル文字列に追加してUIImageView
のスペースを作ることにより、タイトルラベルの上に画像を追加できます。フォントサイズに基づいてレイアウトを計算する必要があります。 UIAlertAction
内の画像の場合は、KVC
を次のように使用します:self.setValue(image, forKey: "image")
。 responds(to:)
をチェックする拡張機能を使用することをお勧めします。
_extension UIAlertAction {
/// Image to display left of the action title
var actionImage: UIImage? {
get {
if self.responds(to: Selector(Constants.imageKey)) {
return self.value(forKey: Constants.imageKey) as? UIImage
}
return nil
}
set {
if self.responds(to: Selector(Constants.imageKey)) {
self.setValue(newValue, forKey: Constants.imageKey)
}
}
}
private struct Constants {
static var imageKey = "image"
}
}
_
これを変える:
UIImageView *imgv=[[UIImageView alloc]initWithFrame:CGRectMake(20,20,50,50)];
imgv.image=[UIImage imageNamed:@"kaga.jpg"];
[alert setValue:imgv forKey:@"image"];
これに:
UIImage *img= [UIImage imageNamed:@"kaga.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[alert setValue:img forKey:@"image"];