web-dev-qa-db-ja.com

UIAlertControllerへの画像の追加

これは完全に機能する私のアラートです。アラートが表示されたときにテキストの横に表示される画像をアラートに追加したいのですが、違いが生じる場合はSpriteKitのSKSceneを使用しています。

var alertController = UIAlertController(title: "How to Skate", message: "Tap the screen to perform a trick and jump over the obsticles (You can Grind on Rails) The game will end when you hit a highlighted red, orange or yellow obstacle. That's it! + Image", preferredStyle: UIAlertControllerStyle.Alert)     
alertController.addAction(UIAlertAction(title: "Cool!", style: UIAlertActionStyle.Cancel, handler: nil))
self.view?.window?.rootViewController?.presentViewController(alertController, animated: true, completion: nil)
9
user5349223

UIImageViewにサブビューとしてUIAlertControllerを追加できます。

var imageView = UIImageView(frame: CGRectMake(220, 10, 40, 40))
imageView.image = yourImage
alert.view.addSubview(imageView)

これがUIAlertControllerでのやり方です。

let alertMessage = UIAlertController(title: "My Title", message: "My Message", preferredStyle: .Alert)

let image = UIImage(named: "myImage")
var action = UIAlertAction(title: "OK", style: .Default, handler: nil)
action.setValue(image, forKey: "image")
alertMessage .addAction(action)

self.presentViewController(alertMessage, animated: true, completion: nil)
10
Abhinav
    let alertMessage = UIAlertController(title: "My Title", message: "", preferredStyle: .alert)
    let action = UIAlertAction(title: "OK", style: .default, handler: nil)
    action.setValue(UIImage(named: "task1.png")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal), forKey: "image")
    alertMessage .addAction(action)
    self.present(alertMessage, animated: true, completion: nil)

スウィフト3

4
Mikhail Baynov

あなたはこのようにすることができます。

    let imageView = UIImageView(frame: CGRectMake(220, 10, 40, 40))
   // imageView.image = UIImage(named: "ic_no_data")
    let alertMessage = UIAlertController(title: "My Title", message: "", preferredStyle: .Alert)

    let image = UIImage(named: "Image")
    let action = UIAlertAction(title: "OK", style: .Default, handler: nil)
    action.setValue(image, forKey: "image")
    alertMessage .addAction(action)

    self.presentViewController(alertMessage, animated: true, completion: nil)
    alertMessage.view.addSubview(imageView)
3
Kushal Shrestha

Swift 4 +

        let refreshAlert = UIAlertController(title: "Unlike Article", message: "Are you sure you want to unlike this Article?", preferredStyle: UIAlertControllerStyle.alert)



        let cancel = UIAlertAction(title:  "CANCEL", style: .default, handler: { (action: UIAlertAction!) in



            return
        })

        let image = #imageLiteral(resourceName: "dislike_icon").resizedImage(newSize: CGSize(width: 25, height: 25))
        let unLike = UIAlertAction(title: "UNLIKE", style: .destructive, handler: { (action: UIAlertAction!) in
            self.articleUnLiking()


            return
        })
        unLike.setValue(image.withRenderingMode(UIImageRenderingMode.alwaysOriginal), forKey: "image")
        refreshAlert.addAction(cancel)
        refreshAlert.addAction(unLike)
        self.present(refreshAlert, animated: true, completion: nil)

注:-繰り返しになりますが、これはプライベートAPIであるため、リリースごとに予告なしに変更される可能性があります。注意して使用してください!

ありがとう

1
Sachin Rasane

プライベートAPIを使用する場合は、private attributedMessageプロパティを使用して、属性付き文字列を画像を含むメッセージとして設定できます。

ソース: https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h

let actionSheet = UIAlertController(title: "title", message: nil, preferredStyle: .actionSheet)

let str = NSMutableAttributedString(string: "Message\n\n", attributes: [NSAttributedStringKey.font: UIFont.preferredFont(forTextStyle: .caption1), NSAttributedStringKey.foregroundColor: UIColor.gray])

let attachment = NSTextAttachment()

attachment.image = --> yourImage <--

str.append(NSAttributedString(attachment: attachment))

actionSheet.setValue(str, forKey: "_attributedMessage")

繰り返しになりますが、これはプライベートAPIであるため、どのリリースでも予告なしに変更される可能性があります。注意して使用してください!

0
JonasG