Bir UIToolbar'da sol ok düğmesi (UINavigationBar'ın “geri” stili gibi) oluşturma


290

Bir "geri" sol ok-çerçeve düğmesi oluşturmak istiyorum UIToolbar.

Anlayabildiğim kadarıyla, bunlardan birini almanın tek yolu UINavigationControllervarsayılan ayarlarda bırakmak ve sol çubuk öğesi için bir tane kullanmaktır. Ama bir tane oluşturmak için bulamamın bir yolu yok UIBarButtonItem, bu yüzden s'ye UIToolbarçok benzemelerine rağmen standartta bir tane yapamıyorum UINavigationBar.

Düğme görüntüleri ile manuel olarak oluşturabilirim, ancak kaynak görüntüleri hiçbir yerde bulamıyorum. Alfa kanalı kenarları vardır, bu nedenle ekran görüntüsü ve kesme çok yönlü sonuçlar elde etmez.

Kullanmayı düşündüğüm her boyut ve renk şeması için ekran görüntüsünün ötesinde bir fikir var mı?

Güncelleme: LÜTFEN DURDURMA soruyu atlatmak ve bunu sormamalı ve kullanmanız gerektiğini düşündürüyor UINavigationBar. Uygulamam Instapaper Pro. Yalnızca bir alt araç çubuğu gösterir (yerden tasarruf etmek ve okunabilir içerik alanını en üst düzeye çıkarmak için) ve altta sol ok şeklinde bir Geri düğmesi koymak istiyorum.

Bana bunu yapmam gerekmediğini söylemek bir cevap değil ve kesinlikle bir ödül hak etmiyor.



Yanıtlar:


130

Ben http://www.teehanlax.com/blog/?p=447 türetilmiş aşağıdaki psd kullandım

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

Daha sonra araç çubuğu öğesinin customView özelliğinde kullandığım özel bir UIView oluşturdum.

Benim için iyi çalışıyor.


Düzenleme: PrairieHippo tarafından işaret edildiği gibi , maralbjo aşağıdaki kullanarak, basit kod hile yaptı (paket içinde özel görüntü gerektirir) bu cevap ile birleştirilmesi gerektiğini buldu. İşte ek kod:

// 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
Yüklediğim PSD siyah bir araç çubuğu içindir. Uygulamam bunu kullanmadığı için mavi olanlarla pek denemedim. Ama bildiğim kadarıyla araç çubuğu gerektiği gibi yeniden renklendirmeyecek. Chris.
PyjamaSam

1
Yeniden renklendirmek için özel bir araca ihtiyacınız yok, Mac Preview'un 'Renk Ayarla' seçeneğini kullanarak yaptım.
Sushant

1
Bu çözüm biraz açıklanabilir mi?
cannyboy

4
Bu psd sadece 1.0f ekran ölçeği için yararlıdır. Retina ekranında korkunç görünecek.
Daniel Wood

3
Bunun için görüntüleri kullanmayın, sadece düzgün bir şekilde yapın ( stackoverflow.com/questions/4260238 için cevaba bakın ).
ingh.am

45

Unicode Yöntemi

İşi halletmek için sadece bir unicode karakter kullanmak çok daha kolay. Unicode Üçgenler veya Unicode Oklar'ı kullanarak oklara bakabilirsiniz . İOS6'dan başlayarak Apple, karakteri kenarlığı olan bir emoji karakteri olarak değiştirdi. Kenarlığı devre dışı bırakmak için 0xFE0E Unicode Varyasyon Seçici'yi ekliyorum .

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;

Kod bloğu sadece demo içindir. Bir NSString'i kabul eden herhangi bir düğmede çalışır.

Karakterlerin tam listesi için Google'da Unicode karakteri ve ne istediğinizi arayın. İşte Siyah Sol Yönlü Üçgen için giriş .

Sonuç

Sonuç


37

UYARI: Bunun iOS 6'da çalışmayacağını bildiren raporlar vardır. Bu, yalnızca işletim sisteminin eski sürümlerinde çalışabilir. Açıkçası, en az bir geliştirici bu hileyi kullandıkları için uygulamalarını reddetti (yorumlara bakın). Kendi sorumluluğunuzdadır kullanın. Bir görüntü kullanmak (yukarıdaki cevaba bakınız) daha güvenli bir çözüm olabilir.

Bu, doğru şekli elde etmek için 101 sekr1t düğme türü kullanılarak kendi görüntü dosyalarınıza eklenmeden yapılabilir. Benim için hile, initWithCustomViewoluşturmak için kullanabileceğimi bulmaktı BarButtonItem. Şahsen bu bir yerine dinamik bir navbar için gerekli toolbar, ama bir araç çubuğu ile test ve kod neredeyse aynı:

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

Bunu bir araç çubuğunda yapıyorsanız, öğeleri nasıl ayarladığınızı ayarlamanız gerekir, ancak bu kodunuzun geri kalanına bağlıdır ve bunu okuyucu için bir egzersiz olarak bırakıyorum. : P Bu örnek benim için çalıştı (derlendi ve çalıştırıldı).

Filan filan, HIG'yi okuyun, belgesiz özellikler kullanmayın ve tüm bunlar. Desteklenen yalnızca altı düğme türü vardır ve bu bunlardan biri değildir.


1
101 numaralı düğme bana sola dönük bir şekil vermiyor gibi görünüyor ... sadece bir dikdörtgen.
elsurudo

10
Bunu yapma - Uygulamanız reddedilecek. Bu cevaba oy verin.
thefaj

4
Emin olmadığına inanmaya meyilliyim; "belgelenmemiş API kullanma" diyor ancak uygulamasının reddedildiğini belirtmiyor. Ve belgesiz bir API değil - belgesiz bir değer. Herkes Eğer gelmiştir olmadan uygulama reddedildi vardı gönderin. Bu değerle onaylanan uygulamaları almaya devam ettim.
AndrewS

1
@thefaj Bu kodda bir uygulama gönderdim ve onaylandı.
Aaron

1
Bu çok kötü kodlama tarzı. Şanslısınız, ancak yalnızca belgelenmiş API (sihirli / yayınlanmamış numaralar değil) kullanmaya devam etmelisiniz.
thefaj

36

resim açıklamasını buraya girin

Her şeyden önce geri düğmesinin bir görüntüsünü bulmalısınız. İPhone'dan tüm grafikleri ayıklayan Extractor adında güzel bir uygulama kullandım . In iOS7 aradım görseli getirmeye başardı UINavigationBarBackIndicatorDefaultve ben kırmızı renk tonunu gerekli çünkü, siyah renkte idi ben Gimp kullanarak kırmızı renk değiştirir.

DÜZENLE:

Yorumunda btate tarafından belirtildiği gibi, görüntü düzenleyici ile rengi değiştirmeye gerek yoktur. Aşağıdaki kod hile yapmalıdır:

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

Sonra o ok ile imageView, özel metin içeren bir etiket ve görünümün üstünde bir eylem ile bir düğme içeren bir görünüm oluşturdum. Sonra basit bir animasyon ekledim (solma ve çeviri).

Aşağıdaki kod, animasyon dahil geri düğmesinin davranışını simüle eder.

-(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{
}

DÜZENLE:

Düğmeyi eklemek yerine, bence daha iyi bir yaklaşım bir jest tanıyıcı kullanmaktır.

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

1
Merhaba Alex, Çözüm için teşekkürler. Ben bu uygulanan çözüm ile karşı karşıya olduğum bir sorun: isabet alan daha az ok i tıklayın zaman kolu geri almak çağrı almaz ama i tıklayın metin kolu geri almak çağrı çağırır. Lütfen bunu önerin. Eyvallah
Yogesh Lolusare

UITapGestureRecognizer'ı kullanmaya çalışıyorum soruyu düzenledim
Alexey

Muhtemelen görünümün boyutunu artırmayı deneyebilirsiniz.
Alexey

2
Bu düğmedeki siyah renk onu bir şablon haline getirir. Değiştirmek için gimp kullanmanıza gerek yoktur. imageView.tint = [UIColor redColor]Görüntüde renk tonu ve şablon oluşturma modunu kullanmanız yeterlidir . imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
smokingoyster

18

Bunun işe yarayacağından emin değilim, ancak UINavigationControllerdüğmeyi oluşturmak, gezinme denetleyicisinin alt görünüm hiyerarşisinde düğmeyi bulmak, removeFromSuperviewüzerinde arama yapmak , gezinme denetleyicisini yok etmek ve ardından düğmeyi araç çubuğunuzun bir alt görünümü. Ayrıca , işlem sırasında yeniden konumlandırılmasını önlemek için retainçağırmadan önce ve düğmeyi removeFromSuperview(ve ardından releasearaç çubuğunuzun alt görünümü olarak ekledikten sonra) ihtiyacınız olabilir.


14

İOS 7 sistemi geri okuna oldukça yakın bir okla (tasarımcı değilim;) bir UIButton yapmak için:

Standart:

Standart sistem geri oku

Apple SD Gotik Neo

Apple SD Gotik Neo <karakter

Xcode'da:

  • Düğmenin başlık değeri alanına (veya metin içeriğine sahip başka bir görünüme / kontrole) odaklanın
  • Düzenle -> Özel Karakterler'i açın
  • Parantez grubunu seçin ve '<' karakterine çift tıklayın
  • Yazı tipini değiştirin: Apple SD Gothic Neo, İstenen boyutta normal (örn. 20)
  • Rengi istediğiniz gibi değiştirin

Ref @ staticVoidMan'ın iOS 7'deki Back-like okuna cevabı


8

geri ok

Görüntü dosyaları ile uğraşmak istemiyorsanız, ok şekli aşağıdaki kodla bir UIView alt sınıfında çizilebilir:

- (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);
}

burada ok görünümü 6.0 genişliği ve 10.0 yüksekliği ile orantılıdır


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

Benim için çalışıyor. Ben daha sonra sekme çubuğuna sığabilecek daha fazla sekme vardı ve "Daha" itti bir görünüm denetleyicisi viewDidLoad leftBarButtonItem overrode.


4

Kaynak görüntüleri UIKit $ {SDKROOT} /System/Library/Frameworks/UIKit.framework/Other.artwork içindeki Other.artwork kaynağından çıkararak bulabilirsiniz. Modding topluluk, onları ayıklamak için bazı araçlara sahiptir burada . Görüntüyü ayıkladıktan sonra, gerektiğinde yeniden renklendirmek ve düğme görüntüsü olarak ayarlamak için bir kod yazabilirsiniz. Böyle bir şeyi gerçekten gönderip gönderemeyeceğiniz (türetilmiş sanat eserlerini gömdüğünüz için) biraz şüpheli olabilir, belki bir avukatla konuşmak istersiniz.


4

Three20 kütüphanesinin bunu yapmanın bir yolu vardır:

  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;

Nihai sonucun ekran görüntüsünü gönderebilir misiniz?
jm.

1
korkunç görünüyordu. Asla sağa bakmak için sol ok geri düğmesine sahip olmadım. Three20 navigatör ile vazgeçtim ve uygun bir geri düğmesi kullandım.
Andrew Arrow

4

Aşağıdaki, basit kod hile yaptı buldum (paket içinde özel görüntü gerektirir):

// 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
Bu sayfaya gelen herkes için bu cevabı @ PyjamaSam'ın cevabı ile birleştirin.
PrairieHippo

@PrairieHippo: Şimdi yapıldı. Muhtemelen ilk etapta düzenlenmelidir. İlk etapta bunu yapmamak için ideal -1 başkaları için işten ayrılır.
hakre

4

İşte tüm bu çözümleri ve diğerlerini araştırdıktan sonra yaptığım şey. UIKit hazır görüntülerden çıkarılan gerilebilir bir png kullanır. Bu şekilde metni istediğiniz gibi ayarlayabilirsiniz

// 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
UIControlStateSelected değil UIControlStateHighlighted kullanmalıdır, aksi takdirde düğmeye dokunulduğunda görüntü değişebilir.
Jim

4

O ilgisi kolaydır Interface Builder içinde Xcode 5.x

Sonuç

  • kullanmak Çubuğu ve Bar Düğme Öğe gelen nesne kitaplığında

    Bileşenler

  • düğmenin içinde Nitelikler denetçisi düzenlemek Görüntü ile bölüm sizin geri düğmesi görüntüsü

    Öznitelik müfettişi

Bitti!


2

Aynı şeyi yapmaya çalışıyordum, ancak geri düğmesinin gezinme çubuğunda olmasını istedim. (Aslında leftBarButtonItem özelliği kullanmak zorunda kaldı, bu yüzden sadece geri gidiş daha fazlasını yapacak bir geri düğmesi gerekiyordu). AndrewS'nin önerisini denedim, ancak UIButton bir UIBarButtonItem'e verildiği için gezinme çubuğunda olması gerektiği gibi görünmüyordu.

Ama bu sorunu çözmek için bir yol buldum. Aslında UIButton altına bir UIView koymak ve UIBarButtonItem için customView ayarlayın. İşte kod, eğer birinin ihtiyacı varsa:

// 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

UIToolbar için bir görüntü oluşturmak için, photoshop'ta bir png yapın ve HİÇBİR YERDE beyaza koyduğu HERHANGİ BİR renk var ve alfa = 0 olduğu yerde yalnız bırakıyor.

SDK, yaptığınız simgenin etrafındaki kenarlığı koyuyor ve hiçbir şey yapmanıza gerek kalmadan beyaza çeviriyor.

Bakın, ileri düğmüm için Photoshop'ta yaptığım şey budur (açıkça geri düğmesi için takas edin):

http://twitpic.com/1oanv

ve Interface Builder'da böyle göründü

http://twitpic.com/1oaoa


1

Bir png kullanmadan çözüm. Bu SO cevabına dayanarak: iPhone TableView Hücresindeki bir hücrenin sağ tarafına küçük oku ekleme

Sadece yatay olarak UITableViewCell saygısız!

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

Swift 5.2 Xcode 11.4

Apple Symbol chevron.left artık özel bir düğme yapmak için daha zarif bir çözüm sunuyor. Boyut ve aralığı olabildiğince yakın eşleştirdim.

resim açıklamasını buraya girin

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)
    }
}

Bu, a UIToolbarItemveyaUINavigationItem

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")
}

Düğmeyi çevirmek ve okun Sağa işaret etmesini istiyorsanız:

resim açıklamasını buraya girin

"Chevron.right" adlı Apple Sembolünü kullanın

CustomBackButtonSınıfa aşağıdaki kodu ekleyin :

    // 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

Bunu kendiniz çizmekten kaçınmak istiyorsanız, belgelendirilmemiş sınıfı kullanabilirsiniz: UINavigationButton 1 stili ile. Bu, elbette uygulamanızın onaylanmasını durdurabilir ... / John


0

Her boyut için farklı bir düğmeye sahip olmanıza gerek yok, kullanabilirsiniz [UIImage stretchableImageWithLeftCapWidth:topCapHeight:], ancak bulduğum tek şey özel görüntüler.


0

Benzer bir sorun yaşadım ve bir kütüphane PButton çıktı . Ve örnek, özelleştirilmiş bir düğme gibi herhangi bir yerde kullanılabilen düğme gibi geri gezinme düğmesidir.

Bunun gibi bir şey: resim açıklamasını buraya girin


0

Swift 3'te, sağ üstte bir önceki ve bir sonraki düğme bulunan örnek.

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

hızlı

// 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

Bunu dene. Böyle bir tane oluşturmak için geri düğmesi görüntüsüne ihtiyacınız olmadığından eminim.

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

Tüm yapmanız gereken bu :)


-23

Bunu neden yapıyorsun? Gezinme çubuğuna benzeyen bir şey istiyorsanız, UINavigationBar öğesini kullanın.

Araç çubukları, kendileriyle ilişkili belirli görsel stillere sahiptir. İPhone durumu için İnsan Arayüz Yönergeleri:

Ekranın alt kenarında bir araç çubuğu görünür ve geçerli görünümdeki nesnelerle ilgili eylemleri gerçekleştiren düğmeler içerir.

Daha sonra metin içermeyen kabaca kare simgelerin birkaç görsel örneğini verir. Bu konuda HIG'yi takip etmenizi öneririm.


8
Bunun farkındayım, teşekkürler. Ancak, kullanım amacımın uygun olduğuna inanıyorum. Gerçekten sorduğum şeyi yapmak istediğimi varsayarak daha yardımcı olabilir misiniz?
Marco

Ekranın en üstüne koyarsanız, yanlış kullanılır. UINavigationBar ve UIToolbar arasındaki degradeleri ve kenarlıkları karşılaştırın; biraz farklı olduklarını göreceksiniz. Kesinlikle ekranın üst kısmında bir UINavigationBar kullanmak istiyorsunuz.
NilObject

10
Ben altına koyuyorum.
Marco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.