सवाल पीछे नेविगेशन बार बटन का फ़ॉन्ट बदलें


मैं अपने ऐप्स नेविगेशन बार बैक बटन का फ़ॉन्ट भी बहुत पागल किए बिना और बटन की किसी अन्य डिज़ाइन विशेषताओं को खोए बिना (यानी मैं तीर रखना चाहता हूं) के फ़ॉन्ट को सेट करने में सक्षम होना चाहता हूं।

अभी मैं इसका उपयोग करता हूं viewDidAppear: सामान्य बार बटन आइटम का फ़ॉन्ट सेट करने के लिए।

for (NSObject *view in self.navigationController.navigationBar.subviews) {
    if ([view isKindOfClass:[UIButton class]]) {
        [((UIButton*)view).titleLabel setFont:[UIFont 
                                 fontWithName:@"Gill Sans" 
                                         size:14.0]];
    }
}

हालांकि, इसके बावजूद बैक बटन पर कोई बदलाव नहीं होता है UIViewController यह कोड (रूट, वर्तमान, आदि) पर लागू होता है।


44
2018-05-14 05:06


मूल


UIBarButton आइटम का कस्टम स्टाइललाइजेशन: stackoverflow.com/a/28347428/469614 - Vexy


जवाब:


सभी में पाठ की उपस्थिति को बदलने के लिए UIBarButtonItems सभी में दिख रहा है UINavigationBars, निम्नलिखित में करें application:didFinishLaunchingWithOptions:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:
    @{UITextAttributeTextColor:[UIColor blackColor],
     UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
     UITextAttributeTextShadowColor:[UIColor whiteColor],
     UITextAttributeFont:[UIFont boldSystemFontOfSize:12.0]
    }
     forState:UIControlStateNormal];

अद्यतन: आईओएस 7 अनुकूल संस्करण

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowOffset = CGSizeMake(0.0, 1.0);
shadow.shadowColor = [UIColor whiteColor];

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]
 setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor blackColor],
   NSShadowAttributeName:shadow,
   NSFontAttributeName:[UIFont boldSystemFontOfSize:12.0]
   }
 forState:UIControlStateNormal];

स्विफ्ट:

नोट: यह सभी उदाहरणों को बदलता है UIBarButtonItem, न कि केवल भीतर के भीतर निहित UINavigationBar

UIBarButtonItem.appearance()
               .setTitleTextAttributes([NSFontAttributeName : ExamplesDefaults.fontWithSize(22)], 
                                       forState: UIControlState.Normal)

Swift3:     UIBarButtonItem.appearance ()। SetTitleTextAttributes ([NSFontAttributeName: UIFont (नाम: "FontName-Regular", आकार: 14.0)!], के लिए: असामान्य)


110
2018-05-14 08:40



यह निश्चित रूप से ऐसा करने का एक आसान तरीका है और यह केवल भविष्य के बटन बटन पर लागू होता है, न केवल बैक बटन। - zachjs
अच्छा काम करता है। नोट IITextAttributeTextColor, आदि आईओएस 7 में बहिष्कृत। - LordParsley
धन्यवाद!। यह मेरे लिए काम कर रहा है। - Raja
आईओएस 11 के बारे में क्या? - Genevios
चेक आउट: stackoverflow.com/a/28347428/469614 - Vexy


किसी भी व्यक्ति के लिए जो इसे पूरी तरह से काम करने के लिए नहीं मिला है, यहां मैंने यह किया है कि मैंने इसे कैसे किया है, जिसमें आईओएस 7 में रूट व्यू कंट्रोलर पर वापस आ गया है:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:self action:@selector(popToRoot:)];
backBtn.title = @"Back";
[backBtn setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                 [UIFont fontWithName:@"Chalkduster" size:15], NSFontAttributeName,
                                 [UIColor yellowColor], NSForegroundColorAttributeName,
                                 nil]
                       forState:UIControlStateNormal];

self.navigationItem.leftBarButtonItem=backBtn;

popToRoot ViewController:

- (IBAction)popToRoot:(UIBarButtonItem*)sender {
[self.navigationController popToRootViewControllerAnimated:YES];
}

शायद किसी का इसका उपयोग हो सकता है।


6
2017-10-16 15:02



स्थानीय लोगों के साथ काम नहीं करेगा और आईएएस में ऐप प्राप्त करने के लिए आवश्यक पूर्व-कॉन्फ़िगर किए गए पहुंच-योग्यता संकेतों को फेंक देगा। जब तक आप बहुत सारे अतिरिक्त काम नहीं करना चाहते हैं, तब तक आपको हमेशा प्रदान किए गए सिस्टम का उपयोग करना चाहिए। - Barry


ऊपर वर्णित सभी का स्विफ्ट संस्करण (से उद्धरण मूल जवाब):

let customFont = UIFont(name: "customFontName", size: 17.0)!
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: customFont], forState: .normal)

अधिक उपहार:
https://stackoverflow.com/a/28347428/469614


4
2018-02-05 15:13





स्विफ्ट 3 में:

let font = UIFont(name: "Verdana", size: 10.0)

// Back button
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: font!], for: UIControlState.normal)  

// Title in the navigation item
let fontAttributes = [NSFontAttributeName: font]
self.navigationController?.navigationBar.titleTextAttributes = fontAttributes

नोट: आपको केवल नेविगेशन नियंत्रक के लिए इसे एक बार करना है।


2
2018-01-26 15:09





इसके बजाय अपने ऐपडिलेगेट में या जहां नेविगेशन कंट्रोलर प्रारंभ किया गया है, आईओएस 5 और उसके बाद की विधि में उपलब्ध विधि

UIBarButtonItem *backbutton =  [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:nil action:nil];  
[backbutton setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                   [UIColor blackColor],UITextAttributeTextColor,[UIFont fontWithName:TEXTFONT size:16.0f],UITextAttributeFont,
                                                   nil] forState:UIControlStateNormal]; 

1
2018-05-14 05:09



बैकबटन कॉन्फ़िगर नहीं किया गया है क्योंकि यह वास्तव में एक पूर्ण उत्तर नहीं है। - Mike Pollard
@ माइकपोलार्ड ने सवाल को फ़ॉन्ट को बदलने के लिए कहा कि बटन का उपयोग कैसे करें। यदि आप जानना चाहते हैं कि इसका उपयोग कैसे करें, तो आपको पूछना चाहिए। - Ahmed Z.


स्विफ्ट 3.0+

AppDelegate.swift

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "myFont", size: 17.0)!], for: .normal)

1
2018-01-30 20:07





यदि आप नए का उपयोग कर रहे हैं UISplitViewControllerDelegate आईओएस 8 में विभाजित विचारों के लिए, उपरोक्त विधियां काम नहीं करेंगे क्योंकि नया displayModeButtonItem थोड़ा अलग काम करता है।

जब आप बना रहे हों तो आपको फ़ॉन्ट सेट करना होगा displayModeButtonItem। मान लीजिए कि आप ऐप्पल के टेम्पलेट्स का पालन कर रहे हैं, शायद यह संभवतः है prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender आप इस तरह कुछ कहां करेंगे:

// From Apple's Template:
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
[controller setDetailItem:object];
controller.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
controller.navigationItem.leftItemsSupplementBackButton = YES;
// New Line to set the font:
[controller.navigationItem.leftBarButtonItem setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"SourceSansPro-Regular" size:14]} forState:UIControlStateNormal];

0
2017-11-09 06:49



असल में अधिक परीक्षण के बाद, मुझे नहीं लगता कि यह काम करता है। अगर किसी के पास इस बारे में कोई विचार है कि फ़ॉन्ट को कैसे बदला जाए displayModeButtonItem मुझे बताएं। - Nick