Soru UIAlertController'da UIAlertAction'a Görüntü Ekle


Satırın solunda bir görüntü ile bir UIAlertControllers bir çift ekran görüntüleri gördüm ama belgelerinde göremiyorum. Bir örnek görsel http://imgur.com/SISBvjB Denetleyicim için şu anda sahip olduğum kod şu:

UIAlertController * view =   [UIAlertController
                                 alertControllerWithTitle:@"My Title"
                                 message:@"Select you Choice"
                                 preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction* ok = [UIAlertAction
                         actionWithTitle:@"OK"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                          }];
    [view addAction:ok];
    [self presentViewController:view animated:YES completion:nil];

44
2017-10-13 19:03


Menşei


Düğmelerini özelleştirmek için API yok UIAlertController. Gördüğünüz ekran görüntüleri ne kullanıyorsa UIAlertController. - rmaddy
Belki OP'yi yanlış anladım, ancak uyarı düğmelerini özelleştirmek istediğini, ancak uyarıya bir görüntü eklemediğini sanmıyorum. - PruitIgoe
Bu benim yaratmaya çalıştığım şey imgur.com/SISBvjB - user1079052
@ user1079052 JP'nin cevabını doğru cevap olarak kabul etmelisiniz. Bu kesinlikle en iyi olanıdır. - soulshined


Cevaplar:


Ve işte böyle yapıldı:

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

görüntü özelliği açık değildir, bu nedenle bu sürümde çalışmanın bir garantisi yoktur, ancak şu anda iyi çalışıyor


76
2017-10-14 19:19



Teşekkür ederim! İşte nesnel C eşdeğeri: UIImage * image = [UIImage imageNamed: @ "image.png"]; [bluetoothButton setValue: image forKey: @ "image"]; - user1079052
eğer senin için çalıştıysa lütfen cevabı kabul et - JP Hribovsek
Teşekkür ederim @JPHribovsek zayıf SO kullanıcısı. Bu cevap doğru cevap olarak kabul edilmelidir. Tek yapabileceğim oylamadır - soulshined
Apple bunu reddetmeyecek mi? - Georg
@PatelJigar her zaman orijinal için işleme modunu değiştirir action.setValue(image.imageWithRenderingMode(.AlwaysOriginal), forKey: "image") - jaytrixz


UIAlertController * view=   [UIAlertController
                             alertControllerWithTitle:@"Staus ! "
                             message:@"Select your current status"
                             preferredStyle:UIAlertControllerStyleActionSheet];


UIAlertAction* online = [UIAlertAction
                     actionWithTitle:@"Online"
                     style:UIAlertActionStyleDefault
                     handler:^(UIAlertAction * action)
                     {
                         //Do some thing here
                         [view dismissViewControllerAnimated:YES completion:nil];

                     }];
UIAlertAction* offline = [UIAlertAction
                         actionWithTitle:@"Offline"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [view dismissViewControllerAnimated:YES completion:nil];

                         }];
UIAlertAction* doNotDistrbe = [UIAlertAction
                         actionWithTitle:@"Do not disturb"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [view dismissViewControllerAnimated:YES completion:nil];

                         }];
UIAlertAction* away = [UIAlertAction
                               actionWithTitle:@"Do not disturb"
                               style:UIAlertActionStyleDestructive
                               handler:^(UIAlertAction * action)
                               {
                                   [view dismissViewControllerAnimated:YES completion:nil];

                               }];

[online setValue:[[UIImage imageNamed:@"online.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];
[offline setValue:[[UIImage imageNamed:@"offline.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];
[doNotDistrbe setValue:[[UIImage imageNamed:@"DND.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];
[away setValue:[[UIImage imageNamed:@"away.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forKey:@"image"];





[view addAction:online];
[view addAction:away];
[view addAction:offline];
[view addAction:doNotDistrbe];
[self presentViewController:view animated:YES completion:nil];

23
2017-10-12 13:04



Merhaba, resmi metnin soluna nasıl ekleyebiliriz? Benim app.Thank You bu gereklilik var - SMS
@SMS Apple, bunu bir kamu mülkiyeti olarak ortaya çıkana kadar “imajı taşımak istediği kadar kolay olmayabilir”. UIAlertController alt sınıflarını deneyebilir ve viewWillLayoutSubviews ve yukarıdaki gibi KVO ile nesneye erişebilirsiniz let image = self.valueForKey("image") ama bu size resmi verecektir. Uzun lafın kısası, Apple'ın uygulamanızı reddetmeyeceği şekilde yapmak çok zor. En kolay seçenek kendi Alert Controller'ınızı oluşturmaktır. - Tim
Teşekkürler! Bu ihtiyaçlarım için mükemmel çalıştı. - Zack Matthews
Bu, görünümün düğmesine (eylemine) bir görüntü eklemek için çalışır. İletiye resim eklemek için çalışmaz. - doxsi
Sadece ihtiyacım olan şey bu. Tek sorun, kullandığınız görüntüyü kullanmanız, çok fazla çözünürlüğü olmasına rağmen, menüde her zaman bulanık görünüyor. Bu sorunun başka biri var mı? - Kepa Santos


Böyle bir şey deneyin:

UIAlertView* alert = [UIAlertView alloc] initWithTitle: @"Test Alert" message: @"Alert With Custom View" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];

UIImage* imgMyImage = [UIImage imageNamed:@"myImage.png"];
UIImageView* ivMyImageView = [UIImageView alloc] initWithFrame:CGRectMake(0, 0, imgMyImage.size.width, imgMyImage.size.height)];
[ivMyImageView setImage:imgMyImage];

[alert setValue: ivMyImageView forKey:@"accessoryView"];
[alert show];

Bunu test etti ve iOS 7.0 için çalışıyor

enter image description here


9
2017-10-13 19:27



Yardım için sizden ama bir eylem sayfasındaki bir düğmenin solunda bir görüntüye ihtiyacım var. Örneğin, bluetooth, hoparlör ve cihaz, vb ses çıkışları arasında geçiş yaptığınızda çağrı ekranında bir tane var. - user1079052
Bu "hack" dahil olmak üzere bir uygulamayı App Store'a göndermek güvenli midir? Reddedilmeyecek mi? - Attila H
Bunun neden bir hack olduğunu düşündüğünden emin değilim, hepsi bu çerçevede. - PruitIgoe
Çalışmıyor Hata mesajı: setValue: forUndefinedKey:]: Bu sınıf anahtar aksesuar için kodlama uyumlu anahtar değer değildir. - Claus
Animasyonlu görüntüler destekleniyor mu? - Ben Leggiero


Alt sınıflara göre başlık etiketinin üstüne resim ekleyebilirsiniz UIAlertController ve ekleyerek \n için alan oluşturmak için başlık dizesi UIImageView. Yazı tipi boyutunu temel alarak düzeni hesaplamanız gerekir. İçindeki resimler için UIAlertAction kullanma KVC öyle öyle self.setValue(image, forKey: "image"). Denetimler için uzantı öneririm responds(to:). İşte örnek uygulama.

enter image description here


7
2017-08-12 11:11



Harika, dostum. Çözüm için teşekkürler. - Hexfire


Hızlı

let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
let action = UIAlertAction(title: NSLocalizedString("Share", comment: ""), style: .default, handler: { _ in
        })
let image = UIImage(named: "Temp1")
action.setValue(image?.withRenderingMode(.alwaysOriginal), forKey: "image")
actionSheet.addAction(action)
actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
self.present(actionSheet, animated: true, completion: nil)

Not: IMP Line withRenderingMode (.alwaysOriginal)


2
2017-07-18 12:43





Hızlı sürümü:

actionBtn.setValue(UIImage.init(named: "completeDose"), forKey: "image")

-1
2018-06-07 09:37





hızlı 3 uzatma, özellik ve kolaylık init.

extension UIAlertAction{
    @NSManaged var image : UIImage?

    convenience init(title: String?, style: UIAlertActionStyle,image : UIImage?, handler: ((UIAlertAction) -> Swift.Void)? = nil ){
        self.init(title: title, style: style, handler: handler)
        self.image = image
    }
}

İlham için Shahar Stern'e teşekkürler


-2
2018-03-23 12:06



NSManaged olmayan NSManagedObjects sınıfları için kullanmamalısınız. UIAlertAction'ın kaputun altında setImage'e yanıt vermesi, bu snippet'in mermi ispatını yapmaz. "Başlık altında" uygulama değiştirirse, bu kod çökmeye neden olur. - Giuseppe Lanza
Belgesiz bir api kullanımı dikkatle kullanılmalıdır. Ve NSManager hızlı bir dinamiktir (sentezlemek yerine), setter ve getter oluşumunu önlemek için farklı bir kelimeniz var mı? - Benny Davidovitz
Belgelenmemiş API kullanımı konusunda size katılıyorum. Bu nedenle, görüntü parametresini KeyValue yaklaşımı ile kullanmak istemiyorsanız, özel bir nesne oluşturmanız gerekir. bu kadar basit. @NSManaged Çekirdek Veri Nesnesi içindir. Bunun yan etkisi, alıcının valueForKey gerçekleştirmesi ve setterin setValue: forKey :. Bu kod kesinlikle güvensizdir ve eğer görüntü değerinin uygulanması gelecekte değişirse, bu kesinlikle bir çarpmaya yol açacaktır. Kısa cevap “özel api'yi kullanmamanız gerektiği kadarıyla yapmamalısınız” - Giuseppe Lanza