एक UIToolbar पर बाएं तीर बटन (UINavigationBar की "बैक" शैली) बनाना


290

मैं एक में "वापस" बाएँ-तीर-बेज़ेल बटन बनाना पसंद करूँगा UIToolbar

जहां तक ​​मैं बता सकता हूं, इनमें से एक को प्राप्त करने का एकमात्र तरीका UINavigationControllerडिफ़ॉल्ट सेटिंग्स पर छोड़ना है और यह एक का उपयोग बार बार आइटम के लिए करता है। लेकिन ऐसा कोई तरीका नहीं है कि मैं एक के रूप में एक बनाने के लिए पा सकता हूं UIBarButtonItem, इसलिए मैं एक मानक में नहीं बना सकता UIToolbar, भले ही वे UINavigationBarएस के समान हों ।

मैं इसे मैन्युअल रूप से बटन छवियों के साथ बना सकता हूं, लेकिन मुझे स्रोत छवियां कहीं भी नहीं मिल सकती हैं। उनके पास अल्फा-चैनल किनारों हैं, इसलिए स्क्रीनशॉट और काटने से बहुत बहुमुखी परिणाम नहीं मिलेगा।

हर आकार और रंग योजना के लिए स्क्रीनशॉट से परे कोई भी विचार जिसका मैं उपयोग करने का इरादा रखता हूं?

अद्यतन: कृपया सवाल को चकमा दे रहा है और सुझाव दे रहा हूं कि मुझे यह नहीं पूछना चाहिए और इसका उपयोग करना चाहिए UINavigationBar। मेरा ऐप Instapaper Pro है। यह केवल एक निचला टूलबार दिखाता है (अंतरिक्ष को बचाने और पठनीय सामग्री क्षेत्र को अधिकतम करने के लिए), और मैं नीचे एक बाएं-तीर के आकार का बैक बटन लगाना चाहता हूं।

यह बताना कि मुझे ऐसा करने की आवश्यकता नहीं है, यह उत्तर नहीं है और निश्चित रूप से एक इनाम के लायक नहीं है।



जवाबों:


130

मैंने निम्नलिखित psd का उपयोग किया है जो मुझे http://www.teehanlax.com/blog/?p=447 से प्राप्त हुआ है

http://www.chrisandtennille.com/pictures/backbutton.psd

मैंने तब बस एक कस्टम यूआईवाईवाई बनाया था जिसका उपयोग मैं टूलबार आइटम के कस्टम व्यू प्रॉपर्टी में करता हूं।

मेरे लिए अच्छा काम करता है।


संपादित करें: PrairieHippo द्वारा बताया गया , maralbjo ने पाया कि निम्नलिखित का उपयोग करते हुए, सरल कोड ने चाल चली (बंडल में कस्टम छवि की आवश्यकता है) को इस उत्तर के साथ जोड़ा जाना चाहिए। तो यहाँ अतिरिक्त कोड है:

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];

1
जिस PSD को मैंने अपलोड किया है वह एक काले टूलबार के लिए है। मैंने नीले रंग के साथ बहुत कोशिश नहीं की है क्योंकि मेरा ऐप इसका उपयोग नहीं करता है। लेकिन जिस चीज से मुझे पता है कि टूल बार उसे आवश्यकतानुसार फिर से रंग नहीं देगा। क्रिस।
पयजामासम

1
इसे फिर से रंगने के लिए आपको किसी विशेष उपकरण की आवश्यकता नहीं है, मैंने इसे मैक प्रीव्यू के 'एडजस्ट कलर' विकल्प का उपयोग करके किया है।
सुशांत

1
क्या इस समाधान को थोड़ा सा समझा जा सकता है?
कैनबॉय

4
यह psd 1.0f के स्क्रीन स्केल के लिए ही उपयोगी है। एक रेटिना डिस्प्ले पर यह भयानक दिखने वाला है।
डेनियल वुड

3
इसके लिए चित्रों का उपयोग न करें, बस इसे ठीक से करें (देखें stackoverflow.com/questions/4260238 के लिए उत्तर )।
इंध

45

यूनिकोड विधि

मुझे लगता है कि काम पूरा करने के लिए एक यूनिकोड चरित्र का उपयोग करना बहुत आसान है। आप या तो यूनिकोड त्रिकोण या यूनिकोड एरो से गुगली करके तीर के माध्यम से देख सकते हैं । IOS6 से शुरू होकर Apple ने एक बॉर्डर के साथ इमोजी के चरित्र को बदल दिया। सीमा को अक्षम करने के लिए मैं 0xFE0E यूनिकोड भिन्न चयनकर्ता को जोड़ता हूं ।

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

कोड ब्लॉक केवल डेमो के लिए है। यह किसी भी बटन में काम करेगा जो एनएसएसट्रिंग को स्वीकार करता है।

वर्णों की पूरी सूची के लिए यूनिकोड वर्ण और आप जो चाहते हैं, उसके लिए Google खोजें। यहां ब्लैक लेफ्ट-पॉइंटिंग ट्राइएंगल के लिए प्रवेश है ।

परिणाम

परिणाम


37

चेतावनी: ऐसी खबरें हैं कि यह आईओएस 6 पर काम नहीं करेगा। यह केवल ओएस के पुराने संस्करणों पर काम कर सकता है। जाहिर है कि कम से कम एक देव ने इस चाल का उपयोग करने के लिए अपना ऐप खारिज कर दिया था (टिप्पणियों को देखें)। अपने जोखिम पार इस्तेमाल करें। एक छवि का उपयोग करना (ऊपर उत्तर देखें) एक सुरक्षित समाधान हो सकता है।

यह सही आकार प्राप्त करने के लिए sekr1t बटन प्रकार 101 का उपयोग करके अपनी स्वयं की छवि फ़ाइलों में शामिल किए बिना किया जा सकता है। मेरे लिए चाल पता लगाना था कि मैं इस्तेमाल कर सकते हैं initWithCustomViewबनाने के लिए BarButtonItem। मुझे व्यक्तिगत रूप से इसके बजाय एक गतिशील नेवबार की आवश्यकता थी toolbar, लेकिन मैंने इसे एक टूलबार के साथ परीक्षण किया और कोड लगभग समान है:

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

यदि आप ऐसा टूलबार पर कर रहे हैं तो आपको आइटम सेट करने के तरीके को ट्वीक करना होगा, लेकिन यह आपके कोड के बाकी हिस्सों पर निर्भर करता है और मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ देता हूं। : P इस नमूने ने मेरे लिए काम किया (संकलित और चलाया)।

ब्ला ब्ला, एचआईजी पढ़ें, अनिर्दिष्ट सुविधाओं का उपयोग न करें, और वह सब। केवल छह समर्थित बटन प्रकार हैं और यह उनमें से एक नहीं है।


1
बटन प्रकार 101 मुझे एक बाईं ओर इशारा करते हुए नहीं लगता ... बस एक आयत।
एल्सरुडो

10
ऐसा न करें - आपका ऐप अस्वीकार कर दिया जाएगा। इस उत्तर को नीचे लिखें।
थेफ

4
मुझे लगता है कि वह निश्चित नहीं है; वह कह रहा है कि "अनिर्दिष्ट एपीआई का उपयोग न करें" लेकिन यह कहते हुए कि उसके ऐप को अस्वीकार नहीं किया गया। और यह एक अनिर्दिष्ट एपीआई नहीं है - यह एक अनिर्दिष्ट मूल्य है। अगर कोई है था उनके एप्लिकेशन को अस्वीकार कर दिया, पोस्ट करें। मैंने इस मूल्य के साथ ऐप्स को अनुमोदित करना जारी रखा है।
एंड्रयूज

1
@ मुझे इस कोड के साथ एक ऐप सबमिट किया गया है, और इसे मंजूरी दे दी गई है।
एरोन

1
यह बहुत ही खराब कोडिंग स्टाइल है। आप भाग्यशाली हैं, लेकिन आपको केवल प्रलेखित एपीआई (जादू / अप्रकाशित संख्या नहीं) का उपयोग करना चाहिए।
दिफज

36

यहां छवि विवरण दर्ज करें

सबसे पहले आपको बैक बटन की एक छवि ढूंढनी होगी। मैंने एक अच्छा ऐप निकाला जिसका नाम एक्सट्रैक्टर है जो आईफोन से सभी ग्राफिक्स निकालता है। में iOS7 मैं छवि कहा जाता है पुनः प्राप्त करने में कामयाब रहे UINavigationBarBackIndicatorDefaultऔर यह काले रंग में था, के बाद से मैं एक लाल रंग की जरूरत मैं लाल Gimp उपयोग करने के लिए रंग बदलने के।

संपादित करें:

जैसा कि उनकी टिप्पणी में btate द्वारा उल्लेख किया गया था , छवि संपादक के साथ रंग बदलने की कोई आवश्यकता नहीं है। निम्नलिखित कोड को चाल करना चाहिए:

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

फिर मैंने एक दृश्य बनाया जिसमें उस तीर के साथ एक छवि दृश्य, कस्टम पाठ के साथ एक लेबल और दृश्य के शीर्ष पर मेरे पास एक कार्रवाई के साथ एक बटन है। फिर मैंने एक साधारण एनीमेशन (लुप्त होती और अनुवाद) जोड़ा।

निम्नलिखित कोड एनीमेशन सहित बैक बटन के व्यवहार को अनुकरण करता है।

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

संपादित करें:

बटन जोड़ने के बजाय, मेरी राय में बेहतर दृष्टिकोण एक इशारा पहचानकर्ता का उपयोग करना है।

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];

1
हाय एलेक्स, समाधान के लिए धन्यवाद। एक समस्या मैं इस कार्यान्वित समाधान के साथ सामना कर रहा हूं: हिट क्षेत्र कम साधन है जब मैं तीर पर क्लिक करता हूं तो हैंडल को कॉल नहीं मिलता है लेकिन जब मैं टेक्स्ट हैंडल पर क्लिक करता हूं तो कॉल प्राप्त करें। कृपया इस पर सुझाव दें। धन्यवाद
योगेश लोलुसरे

UITapGestureRecognizer का उपयोग करने का प्रयास करें मैंने प्रश्न संपादित किया
एलेक्सी

संभवतः आप दृश्य के आकार को बढ़ाने का भी प्रयास कर सकते हैं।
एलेक्सी

2
इस बटन पर काला रंग इसे एक टेम्पलेट बनाता है। इसे बदलने के लिए आपको जिम्प का उपयोग करने की आवश्यकता नहीं है। बस imageView.tint = [UIColor redColor]छवि पर टिंट और टेम्पलेट रेंडरिंग मोड का उपयोग करें। imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
धूम्रपान करने वाला

18

मुझे यकीन नहीं है कि यह काम करेगा, लेकिन आप UINavigationControllerबटन बनाने के लिए डिफ़ॉल्ट सेटिंग्स के साथ बनाने की कोशिश कर सकते हैं , नेविगेशन कंट्रोलर के सबव्यू पदानुक्रम में बटन ढूंढें, उस removeFromSuperviewपर कॉल करें , नेविगेशन नियंत्रक को नष्ट करें, और फिर बटन जोड़ें आपके टूलबार का एक सबव्यू। आपको retainकॉल करने से पहले और बटन की आवश्यकता हो सकती है removeFromSuperview(और फिर releaseइसे अपने टूलबार के उप-भाग के रूप में जोड़ने के बाद) प्रक्रिया से निपटने के दौरान इससे बचने के लिए।


14

IOS 7 सिस्टम बैक एरो के लिए तीर के साथ एक UIButton बनाने के लिए (मैं डिजाइनर नहीं हूँ;):

मानक:

मानक प्रणाली वापस तीर

Apple SD गोथिक नियो

Apple SD गोथिक नियो <चरित्र

Xcode में:

  • बटन के शीर्षक मान क्षेत्र (या पाठ सामग्री के साथ किसी अन्य दृश्य / नियंत्रण) पर ध्यान दें
  • ओपन एडिट -> विशेष वर्ण
  • कोष्ठक समूह का चयन करें और '<' वर्ण पर डबल क्लिक करें
  • फ़ॉन्ट बदलें: Apple SD गोथिक नियो, वांछित आकार के साथ नियमित (उदाहरण के लिए 20)
  • जैसे चाहें रंग बदलें

रेफरी @ staticVoidMan के जवाब वापस की तरह तीर, iOS 7 पर करने के लिए


8

पीछे तीर

यदि आप छवि फ़ाइलों के साथ परेशान नहीं करना चाहते हैं, तो तीर का आकार निम्न कोड के साथ एक UIView उपवर्ग में खींचा जा सकता है:

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

जहां तीर दृश्य 6.0 की चौड़ाई और 10.0 की ऊंचाई के लिए आनुपातिक है


7
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

मेरे लिये कार्य करता है। मैंने इसका उपयोग तब किया जब मेरे पास अधिक टैब थे, तब टैब बार पर फिट हो सकता था, और इसके व्यूडीडलैड में "BBBBtontonItem "को" मोर "से धकेल दिया गया एक व्यू कंट्रोलर।


4

आप UIKit $ {SDKROOT} /System/Library/Frameworks/UIKit.framework/Other.artwork में Other.artwork से उन्हें निकालकर स्रोत चित्र पा सकते हैं। मोडिंग समुदाय के पास उन्हें निकालने के लिए कुछ उपकरण हैं, यहां । एक बार जब आप छवि को निकालते हैं, तो आप इसे आवश्यक रूप से पुनरावृत्ति करने के लिए कुछ कोड लिख सकते हैं और इसे बटन छवि के रूप में सेट कर सकते हैं। आप वास्तव में इस तरह के जहाज कर सकते हैं या नहीं (क्योंकि आप व्युत्पन्न कलाकृति को एम्बेड कर रहे हैं) थोड़ा सा पासा हो सकता है, इसलिए शायद आप एक वकील से बात करना चाहते हैं।


4

थ्री 20 लाइब्रेरी में ऐसा करने का एक तरीका है:

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @"Title" style:UIBarButtonItemStylePlain 
                                                                target:self action:@selector(foo)];

  UIColor* darkBlue = RGBCOLOR(109, 132, 162);

  TTShapeStyle* style = [TTShapeStyle styleWithShape:[TTRoundedLeftArrowShape shapeWithRadius:4.5] next:
    [TTShadowStyle styleWithColor:RGBCOLOR(255,255,255) blur:1 offset:CGSizeMake(0, 1) next:
    [TTReflectiveFillStyle styleWithColor:darkBlue next:
    [TTBevelBorderStyle styleWithHighlight:[darkBlue shadow]
                                     shadow:[darkBlue multiplyHue:1 saturation:0.5 value:0.5]
                                      width:1 lightSource:270 next:
    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(0, -1, 0, -1) next:
    [TTBevelBorderStyle styleWithHighlight:nil shadow:RGBACOLOR(0,0,0,0.15)
                                        width:1 lightSource:270 next:nil]]]]]];

  TTView* view = [[[TTView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)] autorelease];
  view.backgroundColor = [UIColor clearColor];
  view.style = style;
  backButton.customView = view;


  self.navigationItem.leftBarButtonItem = backButton;

क्या आप अंतिम परिणाम का स्क्रीनशॉट पोस्ट कर सकते हैं?
जेएम।

1
यह भयानक लग रहा था। कभी बाएं तीर का बटन ठीक से देखने के लिए नहीं मिला। मैंने हार मान ली और थ्री20 नाविक के साथ एक उचित बैक बटन का उपयोग किया।
एंड्रयू एरो

4

मैंने पाया कि निम्नलिखित का उपयोग करते हुए, सरल कोड ने चाल चली (बंडल में कस्टम छवि की आवश्यकता है):

// Creates a back button instead of default behaviour (displaying title of previous screen)
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                                   style:UIBarButtonItemStyleBordered
                                                                  target:self
                                                                  action:@selector(backAction)];

    tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
    [backButton release];

2
इस पृष्ठ पर आने वाले किसी भी व्यक्ति के लिए, @ PyjamaSam के उत्तर के साथ इस उत्तर को संयोजित करें।
प्रेयरीहिपो

@PrairieHippo: अब किया गया है। शायद पहली बार में संपादित किया जाना चाहिए था। आदर्श -1 ऐसा नहीं करने के लिए पहली जगह में दूसरों के लिए काम छोड़कर।
हैक्रे

4

यहाँ इन सभी समाधानों और अन्य के माध्यम से खोज करने के बाद मैंने क्या किया। यह UIKit स्टॉक इमेज से निकाले गए स्ट्रेचेबल पीएनजी का उपयोग करता है। इस तरह आप टेक्स्ट को सेट कर सकते हैं जो भी आप चाहते हैं

// Generate the background images
UIImage *stretchableBackButton = [[UIImage imageNamed:@"UINavigationBarDefaultBack.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];
UIImage *stretchableBackButtonPressed = [[UIImage imageNamed:@"UINavigationBarDefaultBackPressed.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0];
// Setup the UIButton
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setBackgroundImage:stretchableBackButton forState:UIControlStateNormal];
[backButton setBackgroundImage:stretchableBackButtonPressed forState:UIControlStateSelected];
NSString *buttonTitle = NSLocalizedString(@"Back", @"Back");
[backButton setTitle:buttonTitle forState:UIControlStateNormal];
[backButton setTitle:buttonTitle forState:UIControlStateSelected];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 2, 1); // Tweak the text position
NSInteger width = ([backButton.titleLabel.text sizeWithFont:backButton.titleLabel.font].width + backButton.titleEdgeInsets.right +backButton.titleEdgeInsets.left);
[backButton setFrame:CGRectMake(0, 0, width, 29)];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:13.0f];
[backButton addTarget:self action:@selector(yourSelector:) forControlEvents:UIControlEventTouchDown];
// Now add the button as a custom UIBarButtonItem
UIBarButtonItem *backButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
self.navigationItem.leftBarButtonItem = backButtonItem;

2
UIControlStateHighlighted का उपयोग नहीं करना चाहिए UIControlStateSelected नहीं तो बटन को छूने पर छवि स्वैप करती है।
जिम

4

इंटरफ़ेस बिल्डर के साथ Xcode 5.x में करना आसान है

परिणाम

  • का उपयोग टूलबार और बार बटन मद से वस्तु पुस्तकालय

    अवयव

  • बटन के गुण निरीक्षक में आपकी बैक बटन छवि के साथ छवि अनुभाग संपादित करें

    गुण निरीक्षक

किया हुआ!


2

मैं यही काम करना चाह रहा था, लेकिन मैं चाहता था कि बैक बटन नेविगेशन बार में हो। (मुझे वास्तव में एक बैक बटन की आवश्यकता थी, जो केवल वापस जाने से अधिक काम करेगा, इसलिए मुझे बाईं ओरबटनटन संपत्ति का उपयोग करना होगा)। मैंने कोशिश की कि एंड्रयूएस ने क्या सुझाव दिया, लेकिन नेविगेशन बार में यह उस तरह से नहीं दिखना चाहिए, जैसा कि यूआईबूटन एक यूआईबीआरबॉटन इटेम को दिया गया था।

लेकिन मुझे इसके आसपास काम करने का एक तरीका मिला। मैं वास्तव में सिर्फ यूआईब्यूटॉन के तहत एक यूआईवीयूवाई डालता हूं और कस्टम व्यू को यूआईबारबटन इटेम के लिए सेट करता हूं। यहाँ कोड है, अगर किसी को इसकी आवश्यकता है:

// initialize button and button view
UIButton *backButton = [UIButton buttonWithType:101];
UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backButton.frame.size.width, backButton.frame.size.height)];

[backButton addTarget:self action:@selector(backButtonTouched:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButtonView addSubview:backButton];

// set buttonview as custom view for bar button item
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
self.navigationItem.leftBarButtonItem = backButtonItem;

// push item to navigationbar items
[self.navigationController.navigationBar setItems:[NSArray arrayWithObject:backButtonItem]];

1

यूआईटूलबार के लिए एक छवि बनाने के लिए, फ़ोटोशॉप में एक पीएनजी बनाएं और जहां कहीं भी कोई भी रंग हो, वह इसे सफेद रंग में रखता है, और जहां यह अल्फ़ा = 0 है, तो यह इसे अकेला छोड़ देता है।

एसडीके ने वास्तव में आपके द्वारा बनाए गए आइकन के चारों ओर बॉर्डर लगा दिया है और बिना कुछ किए आपको इसे सफेद कर देता है।

देखें, यह मैंने फ़ोटोशॉप में अपने फॉरवर्ड बटन के लिए बनाया है (जाहिर है कि इसे बैक बटन के लिए चारों ओर स्वैप करें):

http://twitpic.com/1oanv

और यह वही है जो इंटरफ़ेस बिल्डर में दिखाई दिया

http://twitpic.com/1oaoa


1

पीएनजी के उपयोग के बिना समाधान। इस SO उत्तर के आधार पर: iPhone TableView सेल में सेल के दाईं ओर थोड़ा तीर जोड़ना

बस UITableViewCell को क्षैतिज रूप से फ़्लिप करना!

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 5, 70, 20)];

// Add the disclosure
CGRect frm;
UITableViewCell *disclosure = [[UITableViewCell alloc] init];
disclosure.transform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
frm = self.btnBack.bounds;
disclosure.frame = CGRectMake(frm.origin.x, frm.origin.y, frm.size.width-25, frm.size.height);
disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
disclosure.userInteractionEnabled = NO;
[self.btnBack addSubview:disclosure];

// Add the label
UILabel *lbl = [[UILabel alloc] init];
frm = CGRectOffset(self.btnBack.bounds, 15, 0);
lbl.frame = frm;
lbl.textAlignment = NSTextAlignmentCenter;
lbl.text = @"BACK";
[self addSubview:lbl];

1

स्विफ्ट 5.2 Xcode 11.4

Apple सिंबल chevron.left अब एक कस्टम बटन बनाने के लिए अधिक सुरुचिपूर्ण समाधान की अनुमति देता है। मैंने आकार और स्पेसिंग का यथासंभव मिलान किया है।

यहां छवि विवरण दर्ज करें

import UIKit

class CustomBackButton: UIBarButtonItem {

    convenience init(target: Any, selector: Selector) {

        // Create UIButton
        let button = UIButton(frame: .zero)

        // Customise Title
        button.setTitle("Back", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 17)

        // Customise Image
        let config = UIImage.SymbolConfiguration(pointSize: 19.0, weight: .semibold, scale: .large)
        let image = UIImage(systemName: "chevron.left", withConfiguration: config)
        button.setImage(image, for: .normal)

        // Add Target
        button.addTarget(target, action: selector, for: .touchUpInside)

        // Customise Spacing to match system Back button
        button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: -18.0, bottom: 0.0, right: 0.0)
        button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0)

        self.init(customView: button)
    }
}

इसे या तो ए UIToolbarItem, या ए के रूप में लागू किया जा सकता हैUINavigationItem

override func viewDidLoad() {
    super.viewDidLoad()

    // UIToolbar Item
    let barBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    navigationController?.setToolbarHidden(false, animated: false)
    toolbarItems = [barBackButton, flexSpace]

    // Navigation Item
    let navBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    navigationItem.leftBarButtonItem = navBackButton
}

@objc func backButtonTapped() {
    print("Back tapped")
}

यदि आप बटन को फ्लिप करना चाहते हैं और दाईं ओर इंगित करने वाला तीर है:

यहां छवि विवरण दर्ज करें

"Chevron.right" नाम के Apple प्रतीक का उपयोग करें

निम्न कोड को CustomBackButtonवर्ग में जोड़ें :

    // Put the image of the right side of the button
    button.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)

0

यदि आप इसे स्वयं खींचने से बचना चाहते हैं, तो आप अनिर्दिष्ट वर्ग का उपयोग कर सकते हैं: शैली 1 के साथ UINavigationButton। बेशक, यह आपके आवेदन को स्वीकृत होने से रोक सकता है ... / जॉन


0

ठीक है, आपके पास हर आकार के लिए एक अलग बटन नहीं है, आप उपयोग कर सकते हैं [UIImage stretchableImageWithLeftCapWidth:topCapHeight:], लेकिन केवल एक चीज जो मुझे मिली है वह है कस्टम चित्र।


0

मुझे भी इसी तरह की समस्या थी, और एक पुस्तकालय पीबूटन आया । और नमूना बटन की तरह बैक नेविगेशन बटन है, जिसे अनुकूलित बटन की तरह कहीं भी उपयोग किया जा सकता है।

कुछ इस तरह: यहां छवि विवरण दर्ज करें


0

ऊपर दाईं ओर पिछले और अगले बटन के साथ स्विफ्ट 3 में उदाहरण।

let prevButtonItem = UIBarButtonItem(title: "\u{25C0}", style: .plain, target: self, action: #selector(prevButtonTapped))
let nextButtonItem = UIBarButtonItem(title: "\u{25B6}", style: .plain, target: self, action: #selector(nextButtonTapped))
self.navigationItem.rightBarButtonItems = [nextButtonItem, prevButtonItem]

0

तीव्र

// create button
    var backButton = UIButton(type: 101)

    // left-pointing shape!
    backButton.addTarget(self, action: #selector(self.backAction), for: .touchUpInside)
    backButton.setTitle("Back", for: .normal)

    // create button item -- possible because UIButton subclasses UIView!
    var backItem = UIBarButtonItem(customView: backButton)

    // add to toolbar, or to a navbar (you should only have one of these!)
    toolbar.items = [backItem]
    navItem.leftBarButtonItem = backItem

-5

इसे इस्तेमाल करे। मुझे यकीन है कि आपको ऐसा बनाने के लिए बैक बटन इमेज की आवश्यकता नहीं है।

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(yourSelectorGoesHere:)];
self.navigationItem.backBarButtonItem = backButton;

आपको बस इतना ही करना है :)


-23

आप यह क्यों कर रहे हैं? यदि आप कुछ ऐसा चाहते हैं जो नेविगेशन बार की तरह दिखे, तो UINavigationBar का उपयोग करें।

टूलबार की विशिष्ट दृश्य शैली उनके साथ जुड़ी होती है। IPhone स्थिति के लिए मानव इंटरफ़ेस दिशानिर्देश:

एक टूलबार स्क्रीन के निचले किनारे पर दिखाई देता है और इसमें ऐसे बटन होते हैं जो वर्तमान दृश्य में वस्तुओं से संबंधित क्रिया करते हैं।

यह तब बिना किसी पाठ के मोटे तौर पर वर्गाकार आइकन के कई दृश्य उदाहरण देता है। मैं आपसे इस पर एचआईजी का पालन करने का आग्रह करूंगा।


8
मैं इस बात से अवगत हूं, धन्यवाद। हालाँकि, मेरा मानना ​​है कि मेरा इच्छित उपयोग उचित है। क्या आप अधिक सहायक हो सकते हैं, यह मानते हुए कि मैं वास्तव में वह करना चाहता हूं जो मैंने पूछा था?
मार्को

यदि आप इसे स्क्रीन के शीर्ष पर रख रहे हैं, तो इसका गलत उपयोग किया जा रहा है। UINavigationBar और UIToolbar के बीच ग्रेडिएंट्स और बॉर्डर्स की तुलना करें, और आप देखेंगे कि वे थोड़े अलग हैं। आप निश्चित रूप से स्क्रीन के शीर्ष पर एक UINavigationBar का उपयोग करना चाहते हैं।
NilObject

10
मैं इसे नीचे रख रहा हूं।
मार्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.