सवाल UIAlertController में UIAlertAction में छवि जोड़ें


मैंने पंक्ति के बाईं ओर एक छवि के साथ UIAlertControllers के कुछ स्क्रीन शॉट्स देखे हैं लेकिन मैंने इसे दस्तावेज़ में नहीं देखा है। एक उदाहरण दृश्य है http://imgur.com/SISBvjB यहां कोड है जो मेरे पास मेरे नियंत्रक के लिए अभी है:

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


मूल


ए के बटन को कस्टमाइज़ करने के लिए कोई एपीआई नहीं है UIAlertController। जो भी स्क्रीनशॉट आपने देखा है वह उपयोग नहीं कर रहे हैं UIAlertController। - rmaddy
शायद मैंने ओपी को गलत समझा लेकिन मुझे नहीं लगता कि वह अलर्ट बटन को कस्टमाइज़ करना चाहता है लेकिन अलर्ट में एक छवि जोड़ना चाहता हूं। - PruitIgoe
यही वह है जिसे मैं बनाने की कोशिश कर रहा हूं imgur.com/SISBvjB - user1079052
@ user1079052 आपको जेपी जवाब को सही उत्तर के रूप में स्वीकार करना चाहिए। यह निश्चित रूप से एसओ पर सबसे अच्छा है - soulshined


जवाब:


और इस तरह यह किया गया है:

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

छवि संपत्ति का खुलासा नहीं किया गया है, इसलिए भविष्य में रिलीज में काम करने की कोई गारंटी नहीं है, लेकिन अभी तक ठीक काम करता है


76
2017-10-14 19:19



धन्यवाद! यहां उद्देश्य सी समकक्ष है: UIImage * image = [UIImage imageNamed: @ "image.png"]; [ब्लूटूथ बटन सेट वैल्यू: छवि के लिए छवि: @ "छवि"]; - user1079052
अगर यह आपके लिए काम करता है तो कृपया उत्तर स्वीकार करें - JP Hribovsek
@JPHribovsek गरीब SO उपयोगकर्ता धन्यवाद। यह उत्तर सही उत्तर के रूप में स्वीकार किया जाना चाहिए। मैं बस इतना कर सकता हूं - soulshined
ऐप्पल इसे अस्वीकार नहीं करेगा? - Georg
@PatelJigar प्रतिपादन मोड हमेशा मूल में बदलें 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



हाय, हम पाठ के बाईं ओर छवि को कैसे जोड़ सकते हैं। मेरे पास मेरे ऐप में यह आवश्यकता है। धन्यवाद - SMS
@ एसएमएस जब तक ऐप्पल इसे सार्वजनिक संपत्ति के रूप में उजागर नहीं करता है, यह "छवि को स्थानांतरित करना चाहते हैं" के रूप में उतना आसान नहीं हो सकता है। आप UIAlertController को उप-वर्गीकरण करने का प्रयास कर सकते हैं और ओवरराइड कर सकते हैं viewWillLayoutSubviews और ऊपर की तरह केवीओ के माध्यम से वस्तु का उपयोग करें let image = self.valueForKey("image") लेकिन यह आपको छवि देगा। लंबी कहानी छोटी है, ऐसा करना शायद इस तरह से करना मुश्किल है कि सेब आपके ऐप को अस्वीकार नहीं करेगा। सबसे आसान विकल्प अपना खुद का अलर्ट कंट्रोलर बनाना है - Tim
धन्यवाद! यह मेरी जरूरतों के लिए पूरी तरह से काम किया। - Zack Matthews
यह दृश्य के बटन (क्रिया) पर एक छवि जोड़ने के लिए काम करता है। संदेश में छवि जोड़ने के लिए काम नहीं करते हैं। - doxsi
यह वही है जो मुझे चाहिए था। एकमात्र समस्या यह है कि आप जिस छवि का उपयोग करते हैं उसका उपयोग करते हैं, हालांकि इसमें बहुत सारे संकल्प हैं, यह हमेशा मेनू में धुंधला दिखता है। क्या किसी और को यह समस्या है? - Kepa Santos


इस तरह कुछ कोशिश करें:

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];

इसका परीक्षण किया और यह आईओएस 7.0 के लिए काम करता है

enter image description here


9
2017-10-13 19:27



आपकी मदद के लिए, लेकिन मुझे एक एक्शन शीट में बटन के बाईं ओर एक छवि चाहिए। उदाहरण के लिए जब आप ब्लूटूथ, स्पीकर और डिवाइस इत्यादि के अपने ऑडियो आउटपुट के बीच स्विच करते हैं तो कॉल स्क्रीन पर एक होता है .... - user1079052
ऐप स्टोर में इस "हैक" सहित ऐप सबमिट करना सुरक्षित है? इसे खारिज नहीं किया जाएगा? - Attila H
निश्चित नहीं है कि आपको लगता है कि यह एक हैक क्यों है, यह सब ढांचे में है। - PruitIgoe
यह काम नहीं करता त्रुटि संदेश: setValue: forUndefinedKey:]: यह वर्ग कुंजी accessoryView के लिए कुंजी मान कोडिंग-अनुरूप नहीं है। - Claus
एनिमेटेड छवियों का समर्थन कर रहे हैं? - Ben Leggiero


आप सबक्लासिंग द्वारा शीर्षक लेबल के ऊपर छवि जोड़ सकते हैं UIAlertController और जोड़ना \n के लिए जगह बनाने के लिए शीर्षक स्ट्रिंग के लिए UIImageView। आपको फ़ॉन्ट आकार के आधार पर लेआउट की गणना करना होगा। में छवियों के लिए UIAlertAction का उपयोग करते हुए KVC इस तरह self.setValue(image, forKey: "image")। मैं विस्तार की सिफारिश करता हूं जो जांचता है responds(to:)यहां नमूना कार्यान्वयन है।

enter image description here


7
2017-08-12 11:11



बहुत बढ़िया, दोस्त। समाधान के लिए धन्यवाद। - Hexfire


तेजी से के लिए

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)

नोट: आईएमपी लाइन के साथ रेंडरिंग मोड (.alwaysOriginal)


2
2017-07-18 12:43





स्विफ्ट संस्करण:

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

-1
2018-06-07 09:37





तेजी से 3 विस्तार, संपत्ति और सुविधा 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
    }
}

प्रेरणा के लिए शाहर स्टर्न के लिए धन्यवाद


-2
2018-03-23 12:06



आपको गैर NSManagedObjects कक्षाओं के लिए NSManaged का उपयोग नहीं करना चाहिए। तथ्य यह है कि हुड के तहत UIAlertAction ने सेट इमेज को जवाब दिया, यह स्निपेट बुलेट प्रूफ नहीं बनाता है। यदि "हुड के तहत" कार्यान्वयन में परिवर्तन होता है तो यह कोड दुर्घटना का कारण बन जाएगा। - Giuseppe Lanza
अनियंत्रित एपीआई के किसी भी उपयोग का सावधानी से उपयोग किया जाना चाहिए, और एनएसएमएनेजर स्विफ्ट की गतिशील है (संश्लेषण के बजाय एक), क्या आपके पास सेटर और गेटर निर्माण से बचने के लिए एक अलग शब्द है? - Benny Davidovitz
मैं आपके साथ अनियंत्रित एपीआई के उपयोग के बारे में सहमत हूं। इसलिए यदि आप KeyValue दृष्टिकोण के साथ छवि पैरामीटर का उपयोग नहीं करना चाहते हैं, तो आपको एक कस्टम ऑब्जेक्ट बनाना होगा। इतना ही आसान। @NSManaged कोर डेटा ऑब्जेक्ट के लिए है। इसका साइड इफेक्ट यह है कि गेटटर वैल्यूफोरकी करता है और सेटर सेट करता है वैल्यू: forKey:। यह कोड बिल्कुल असुरक्षित है, और यदि भविष्य में छवि मूल्य के कार्यान्वयन के कार्यान्वयन से यह निश्चित रूप से एक दुर्घटना का कारण बन जाएगा। संक्षिप्त जवाब यह है कि "आपको वैसे भी ऐसा नहीं करना चाहिए, जितना आपको निजी एपीआई का उपयोग नहीं करना चाहिए" - Giuseppe Lanza