2012-07-24 32 views
7

मेरे पास शीर्षक स्ट्रिंग "DO: ये कार्य" के साथ एक UIActionSheet है। शीर्षक स्ट्रिंग में, सबस्ट्रिंग "डीओ:" बोल्ड होना चाहिए (एक विशेष फ़ॉन्ट आकार के साथ) और "इन कार्यों" को सबस्ट्रिंग नियमित होना चाहिए। क्या यह संभव है? मैं यह कैसे कर सकता हूँ?UIActionSheet शीर्षक स्ट्रिंग का फ़ॉन्ट प्रकार और आकार बदलें

उत्तर

28

मुझे लगता है कि आप एक वर्ग जो UIActionSheetDelegate प्रोटोकॉल लागू करता है और अपने वर्ग, वर्तमान UIActionSheet के एक प्रतिनिधि वर्ग है ताकि कक्षा में आप UIActionSheet के पूरे शीर्षक की तरह बदल सकते हैं

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    for (UIView *_currentView in actionSheet.subviews) { 
     if ([_currentView isKindOfClass:[UILabel class]]) { 
      [((UILabel *)_currentView) setFont:[UIFont boldSystemFontOfSize:15.f]]; 
     } 
    } 
} 

लेकिन जहां तक ​​आप देखते हैं कि UILabel ऑब्जेक्ट की text संपत्ति के हिस्से को प्रारूपित करने का कोई मौका नहीं है।


आप भिन्न फ़ॉन्ट के साथ अब अपनी actionsheet के लिए एक नया UILabel जोड़ सकता है, अगर आप बोल्ड DO: स्ट्रिंग के साथ एक पाठ देखना चाहते हैं ... लेकिन यहाँ से सीमा केवल आप कल्पना है, तो आप स्वरूपित कर सकते हैं इस विधि में UIActionSheet के तत्व या -didPresentActionSheet: विधि के अंदर भी।

तो यह विचार होगा।

अद्यतन यहाँ पर 7 2013

iOS7 में हम वास्तव में एकUIAlertViewया एकUIActionSheetवस्तु की subviews के लिए सीधी पहुँच नहीं है, तो यह समाधान iOS7 पर्यावरण पर ठीक से काम नहीं किया जा सकता है ।

यदि आपको आईओएस 7 पर कोई समस्या है, तो कृपया मुझे टिप्पणी करें! धन्यवाद।

अद्यतन पर 22 जून 2014

मैं नए UIAlertController iOS8 में साथ सीधे इस तरह बात करने के लिए कोई समाधान नहीं मिला है, शीर्षक लेबल, UIAlertController के पूरे दृश्य-पदानुक्रम में दिखाई नहीं करने के लिए लग रहा है न इससे पहले या यहां तक ​​कि दिखाई देने से पहले दिखाई देता है।

नोट: मैं भी समझ गए होंगे कि यह ओवरलैप/उसकी सामग्री को कवर, के बाद यह स्क्रीन पर दिखाई मना नहीं है। वर्तमान में भविष्यवाणी करना असंभव है कि यह बीटा पर काम करेगा या यह ऐपस्टोर-सुरक्षित है या नहीं।

नोट: आपके मन में दृश्य-जीवन चक्र के समय सहन कृपया, और अगर है कि नेविगेशन ढेर में पहले से ही नहीं है एक दृश्य या देखने controler में किसी भी सामग्री पेश करने के लिए कोशिश मत करो।

वैसे भी, यहां स्विफ्ट समाधान है कि मैं परतों तक कैसे पहुंच सकता हूं और मैं इसे अपना कस्टम व्यू जोड़ सकता हूं।

let alertController: UIAlertController = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert) 
self.presentViewController(alertController, animated: true, completion: { 
    let aboveBlurLayer: UIView = alertController.view.subviews[0] as UIView 
    let belowBlurLayer: UIView = (aboveBlurLayer.subviews[0].subviews as Array<AnyObject>)[0] as UIView 
    let customView: UIView = UIView(frame: aboveBlurLayer.bounds) 
    customView.backgroundColor = UIColor.redColor() 
    aboveBlurLayer.addSubview(customView) 
    }) 

नोट: यह एक चेतावनी/actionsheet करने के लिए कस्टम सामग्री जोड़ने के लिए उपयोगी हो सकता है, लेकिन अगर यह भविष्य में काम नहीं करता है, मैं अपने जवाब अद्यतन करेगा।

+1

यह इस ** वास्तव में ** कोई 3 हिस्सा कोड की जरूरत है के लिए किसी भी मुद्दे –

6

Holex के जवाब के आधार पर:

दोनों iOS7 और iOS6 निम्नलिखित मेरे लिए काम किया है UIActionSheet गुणों का शीर्षक बदलने के लिए के लिए

। कृपया ध्यान दें कि वास्तव में अज्ञात के लिए, मैं वास्तव में एक नया सबव्यू जोड़ रहा हूं? वर्तमान UILabel को अद्यतन करने का कारण केवल पाठ का आधा हिस्सा देता है? इसके अलावा "शीर्षक" पहले UILabel की गारंटी है, इसलिए हम एक बदलाव के बाद लूप को तोड़ते हैं।

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    for (UIView *_currentView in actionSheet.subviews) { 
     if ([_currentView isKindOfClass:[UILabel class]]) { 
      UILabel *l = [[UILabel alloc] initWithFrame:_currentView.frame]; 
      l.text = [(UILabel *)_currentView text]; 
      [l setFont:[UIFont fontWithName:@"Arial-BoldMT" size:20]]; 
      l.textColor = [UIColor darkGrayColor]; 
      l.backgroundColor = [UIColor clearColor]; 
      [l sizeToFit]; 
      [l setCenter:CGPointMake(actionSheet.center.x, 25)]; 
      [l setFrame:CGRectIntegral(l.frame)]; 
      [actionSheet addSubview:l]; 
      _currentView.hidden = YES; 
      break; 
     } 
    } 
} 

उपर्युक्त आईओएस 6 और आईओएस 7 सिमुलेटर पर काम करता प्रतीत होता है। मुझे यकीन नहीं है कि यह आईओएस के अन्य भविष्य के संस्करणों के साथ काम करेगा या नहीं।

+0

यह आईओएस 8.3 पर काम नहीं कर रहा है। :) –

4

निम्नलिखित उपयोगी हो सकते हैं।

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 
{ 
    [actionSheet.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
     if ([obj isKindOfClass:[UIButton class]]) { 
      UIButton *button = (UIButton *)obj; 
      button.titleLabel.font = [UIFont systemFontOfSize:15]; 
     } 
    }]; 

} 
9

iOS 7 के लिए निम्नलिखित कोड काम करेंगे।

लागू UIActionSheetDelegate रूप

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    [actionSheet.subviews enumerateObjectsUsingBlock:^(id _currentView, NSUInteger idx, BOOL *stop) { 
     if ([_currentView isKindOfClass:[UIButton class]]) { 
      [((UIButton *)_currentView).titleLabel setFont:[UIFont boldSystemFontOfSize:15.f]]; 
      // OR 
      //[((UIButton *)_currentView).titleLabel setFont:[UIFont fontWithName:@"Exo2-SemiBold" size:17]]; 
     } 
    }]; 
} 

आईओएस 6 के लिए इस प्रकार

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { 
    for (UIView *_currentView in actionSheet.subviews) { 
     if ([_currentView isKindOfClass:[UILabel class]]) { 
      [(UILabel *)_currentView setFont:[UIFont boldSystemFontOfSize:15.f]]; 
      // OR 
      //[(UILabel *)_currentView setFont:[UIFont fontWithName:@"Exo2-SemiBold" size:17]]; 
     } 
    } 
} 
+0

किसी कारण से यह रद्द बटन के फ़ॉन्ट को नहीं बदलेगा :( – samvermette

+0

उपरोक्त हे @ @ सेवरवेमेट का परीक्षण किया गया है और मेरे ऐप में से एक में उपयोग किया जाता है :) ठीक काम कर रहा था। अगर आपको कोई अन्य समाधान मिल जाए तो कृपया अपडेट करें। – icodebuster

+0

@icodebuster आपका समाधान मेरे लिए आईओएस 7 पर अच्छा काम करता है, धन्यवाद। –

0

वहाँ UIActionSheet का एक आंतरिक संपत्ति _titleLabel कहा जाता है तो यह एक संदर्भ हो और जिम्मेदार ठहराया स्ट्रिंग संपत्ति को बदलने के लिए संभव है इस लेबल का सीधे।

कृपया ध्यान रखें कि यह एक निजी एपीआई ऐप स्टोर में खारिज कर दिया जा सकता है।

यह ऐसे काम करता है:

- (NSAttributedString *) actionSheetAttributedTitle; 
{ 
    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:@"Test"]; 
    UIFont *font=[UIFont fontWithName:@"Helvetica-Bold" size:13.0f]; 
    [attString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attString.length)]; 
    [attString addAttribute:NSForegroundColorAttributeName 
        value:[UIColor blackColor] 
        range:NSMakeRange(0, attString.length)]; 
    return [attString copy]; 
} 

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet; 
{ 
    UILabel *sheetTitleLabel; 
    if([actionSheet respondsToSelector:@selector(_titleLabel)]) { 
     sheetTitleLabel = objc_msgSend(actionSheet, @selector(_titleLabel)); 
     sheetTitleLabel.attributedText = [self actionSheetAttributedTitle]; 

    } 
} 
संबंधित मुद्दे