UINavigationBar'a bir düğme nasıl eklenir?


Yanıtlar:


294

Örnek kod ayarlamak için rightbuttonbir üstünde NavigationBar.

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
    style:UIBarButtonItemStyleDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];

Ancak normalde yazmanızı NavigationControllersağlayan bir a sahip olursunuz:

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
    style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;

1
Stilde bir uyarı alıyorum: parametre -> uyarı: Semantik Sorun: 'UIBarButtonSystemItem' numaralandırma türünden farklı numaralandırma türüne 'UIBarButtonItemStyle' örtük dönüştürme
pojo

3
Bu, uyarıyı önlemek için initWithBarButtonSystemItem: UIBarButtonSystemItemDone olmalıdır.
JordanC

2
Örnekte, "bar" ın nereden geldiğini anlamıyorum. Bir UINavigationItem için varsayılan üst çubuk özelliği nedir?
aneuryzm

Yanıttaki çubuk değişkeni, bir gezinme denetleyicisi tarafından yönetilmeyen herhangi bir gezinme çubuğudur. Bir gezinme denetleyiciniz varsa, yönettiği kendine ait bir gezinme çubuğuna sahiptir - bu durumda, gezinme denetleyicisine ittiğiniz her görünüm denetleyicisi kendi gezinme öğesini yapılandırmalıdır (bu, kendi gezinme öğesinde rightBarButtonItem ayarını içerir) Emlak).
Vasiliy Kulakov

Mevcut okuyucular için, [rightbutton release]ARC altında arama yapmak için herhangi bir neden olduğuna inanmıyorum (bu yorumun ilk yazıldığı sırada ortalıkta yoktu).
karbokatyon

20

Yukarıdaki cevaplar güzel, ancak birkaç ipucu ile bunları detaylandırmak istiyorum:

Geri düğmesinin başlığını değiştirmek istiyorsanız (gezinme çubuğunun soluna bakan ok-y), görüntüleyeceği değil ÖNCEKİ görünüm denetleyicisinde yapmanız GEREKİR. "Hey, bunun üzerine başka bir görüntü denetleyicisine basarsanız, varsayılan yerine" Geri "(veya her neyse) geri düğmesini arayın" demek gibi bir şey.

Bir UIPickerView görüntülenirken olduğu gibi özel bir durum sırasında geri düğmesini gizlemek istiyorsanız, özel durumdan self.navigationItem.hidesBackButton = YES;çıktığınızda geri düğmesini kullanın ve bunu geri ayarlamayı unutmayın.

Özel sembolik düğmelerden birini görüntülemek istiyorsanız, formu aşağıdaki initWithBarButtonSystemItem:target:actiongibi bir değerle kullanın:UIBarButtonSystemItemAdd

Unutmayın, bu sembolün anlamı size bağlıdır, ancak İnsan Arayüzü Yönergelerine dikkat edin. Bir öğeyi silmek için UIBarButtonSystemItemAdd kullanılması, muhtemelen uygulamanızın reddedilmesine neden olacaktır.


11

Gezinme çubuğuna özel düğme ekleme (buttonItem için görüntü ile ve eylem yöntemini (void) belirten openView {} ve).

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 32, 32);
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init];
[barButton setCustomView:button];
self.navigationItem.rightBarButtonItem=barButton;

[button release];
[barButton release];

7

Aşağıdaki örnek, sağdaki gezinme çubuğunda "Kişi" başlıklı bir düğme gösterecektir. Eylemi, görüntü denetleyiciden "kişi" adlı bir yöntemi çağırır. Bu satır olmadan sağ düğme görünmez.

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
                                                                          style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;

görüntü açıklamasını buraya girin


3

Swift 2'de şunları yaparsınız:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton

(Büyük bir değişiklik değil) Swift 4/5'te şöyle olacak:

let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton

2

Neden aşağıdakileri kullanmıyorsunuz: ( iPhone Gezinme Çubuğundaki özel Geri çiz düğmesinden )

// Add left
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"];
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"];
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES];

// set the delegate to self
[self.navigationController.navigationBar setDelegate:self];

0

hızlı 3

    let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:)))
    cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(),
                                                          NSForegroundColorAttributeName : UIColor.white], for: .normal)
    self.navigationItem.leftBarButtonItem = cancelBarButton


    func cancelPressed(_ sender: UIBarButtonItem ) {
        self.dismiss(animated: true, completion: nil)
    }
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.