Gezinme Çubuğundaki “geri” düğmesinin başlığını nasıl değiştiririm


224

Şu anda sol çubuk düğmesi varsayılan değeri, geçerli olanı yükleyen görünümün başlığıdır, başka bir deyişle düğmeye basıldığında gösterilecek görünümdür (geri düğmesi).

Düğmede gösterilen metni başka bir şeyle değiştirmek istiyorum.

Görünüm denetleyicisinin viewDidLoad yönteminde aşağıdaki kod satırını koymaya çalıştım ama işe yaramıyor gibi görünüyor.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

Ne yapmalıyım?

Teşekkürler.

Yanıtlar:


345

Bu, "NewTitle" başlıklı ViewController çağıran yönteme yerleştirilmelidir. Push veya popViewController ifadesinden hemen önce.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

47
Alt görünüm denetleyicisindeyken, bunu alt görünüm denetleyicisinden çağırmak çalışmaz. Bunu, alt görünüm denetleyicisindeyken üst görünüm denetleyicisinden çağırmanız gerekir.
Alex Reynolds

2
Üçüncü seviye görünüm denetleyicim (ikinci basma) için geri düğmesini değiştirmek için yukarıdaki cevap yerine aşağıdaki satırı kullanmak zorunda kaldım: [[self.parentViewController navigationItem] setBackBarButtonItem: newBackButton]; Yanlış bir şey mi yapıyorum?
JonB

4
Ürdün, "kodu nereye koyacağına" biraz daha açıklık getirdiğini "söyledi. İşte daha da netlik: ikinci (yani alt) denetleyiciyi itme çağrısından hemen önce, ilk (aka ana) denetleyiciye koyun.
benvolioT

1
özel bir BaseViewController oluşturabilir ve içine koyabilirsiniz-viewDidLoad:
ArtFeel

2
Push veya pop'dan hemen önce bunu yapmak zorunda değilsiniz. ViewDidLoad veya loadView veya bu görünüm için başlığı ve diğer özellikleri ayarladığınız başka bir yerde yapabilirsiniz. Victor Bogdan'ın aşağıdaki cevabı daha açık, IMHO.
Joe Strout

98

ChildVC'de bu benim için çalıştı ...

self.navigationController.navigationBar.topItem.title = @"Back";

Swift'te de çalışıyor!

self.navigationController!.navigationBar.topItem!.title = "Back"

4
Xcode 5.0.2'de iOS 7'de test edildi ve doğrulandı. Bu, geri döndüğünüzde önceki ekranın başlığını Geri olarak değiştirecektir.
Alex Zavatone

En basit çözüm. Hem iOS 6 hem de 7'de çalışır. UIViewController tabanına koyun ve bitti. IB çözümünden veya itme vc ayarından çok daha iyi.
Eric Chen

46
önceki görünüm denetleyicisinin başlığını değiştirir, bu çözümdeki sorun budur
Nikita

2
@Nikita, Döşemeyi tekrar görünümde ayarlayabilirsinizWillDisappear
Dan Beaulieu

81

İşte backBarButtonItem belgeleri :

"Bu gezinti öğesi yığındaki en üst öğenin hemen altındaysa, gezinme denetleyicisi gezinti çubuğunun geri düğmesini bu gezinme öğesinden alır. [...] Geri düğmesi için özel bir resim veya başlık belirtmek istiyorsanız. , bunun yerine bu mülke özel bir çubuk düğmesi öğesi (özel başlığınız veya resminizle birlikte) atayabilirsiniz. "

View Controller A ( "üst" görünüm denetleyicisi):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

Başka bir görünüm denetleyicisi B navigasyon yığınının üstünde ve A hemen altındaysa, B'nin geri düğmesi "Kısa" başlığına sahip olacaktır .


4
zor kısmı, alt görünümü değil, PARENT görünüm denetleyicisinde geri düğmesini ayarlamanız gerekir. Bir saat boşa harcadım bunu anladım.
Merkurial

56

film şeridi kullanarak Xcode 4.5'te, Geri düğmesinin değerinin dinamik olarak değişmesi gerekmediğinde bulduğum en kolay çözüm, Görünüm Denetleyicisinin Gezinme Öğesi ile ilişkili "Geri Düğmesi" alanını kullanmaktır. "Geri" düğmesinin başka bir şey söylemesini istiyorum.

örneğin aşağıdaki ekran görüntüsünde, geri ittiğim görüntü denetleyicileri için Geri düğmesinin Geri düğmesinin başlığı olarak "Geri" olmasını istiyorum.

resim açıklamasını buraya girin

Tabii ki, her seferinde biraz farklı bir şey söylemek için geri düğmesine ihtiyacınız varsa bu işe yaramaz… bunun için diğer tüm çözümler var.


Orijinal soru film şeridi kullanma hakkında bir şey söylemedi, bu yüzden bu kesinlikle kabul edilen cevap değil , ancak film şeridi tabanlı geliştirme için bir çözüm düzeltin.
villapossu

42

Biliyorum, soru çok eski, ama güzel bir çözüm buldum.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

ChildView'den çalışır! İOS 7 ile test edildi.


Bu sadece bir seviyeye kadar çalışıyor gibi görünüyor. Benim için bir çocuğun çocuğu için çalışmıyor. iOS 8.
narco

26

Belki çok basit oluyorum ama Apple'ın belgelerinden ifadeler:

Bir ederse özel çubuğu düğme öğesi görünümü denetleyicileri biri tarafından belirtilmemişse, bir varsayılan geri düğmesi kullanılır ve bunun başlık Önceki görünüme başlığı özelliğinin değerine ayarlanır kontrolör-yani aşağı görünüm denetleyici bir seviye yığını.

Yukarıda doğru olarak işaretlenmiş çözüm, ana denetleyiciden varsayılan bir düğme öğesi ayarlar. Bu doğru yanıt, ancak self.titleyeni denetleyiciyi NavigationController yığınına itmeden önce UIViewController'ın özelliğini değiştirerek sorunu çözüyorum.

Bu, bir sonraki denetleyicideki geri düğmesinin başlığını otomatik olarak güncelleştirir ve self.titleiçinde ne olması gerektiğini ayarladığınız sürece viewWillAppearbu yöntemi çok fazla soruna neden göremiyorum.


19

Bu iş benim için daha iyi. Deneyin :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

19

Swift / iOS8'de aşağıdakiler benim için çalıştı:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

Felipe'nin cevabından taşınmış.


1.1 sözdizimi hızlıself.navigationController?.navigationBar.topItem?.backBarButtonItem
Warren Burton

3
Stil UIBarButtonItemStyle.Plain olmalıdır
Micro

2
Bunun için teşekkürler. Bu gerçekten acıklı bir API. Ve genel olarak UIKit'in temsilcisi. İOS'ta gezinme çubukları ve Durum Çubukları arasında, bu kahrolası platform için hala geliştirmemiz harika bir şey. Bebek İsa'ya Stack Overflow ve katkıları için teşekkür ederiz!
Womble

@Wobmle: Android için birkaç ay geliştirmelisiniz;)
fl034

17

Tamam, işte böyle. Bir görünüm denetleyiciniz "önce" ve başka bir görünüm denetleyicisine "ikinci" bir düğmeye veya vb. Basarak giderseniz, biraz çalışma yapmanız gerekir. Öncelikle "ikinci" görünüm denetleyicisinin ViewDidLoad yönteminde bir BarButtonItem oluşturmanız gerekir;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

Bunu yaptıktan sonra, aynı bm dosyasında "btnBack" eylemi için koda kod yazmanız gerekir;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

Bu kadar.


2
A , uygulama tasarımında önemliyse, leftBarButtonItema'nın görünümü yoktur backBarButtonItem.
Alex Reynolds

1
Gönderilen çözümlerden (çok teşekkür ederim), Alex'in yukarıda belirttiği gibi, sol çubuk düğmesi bir arka çubuk öğesi gibi görünmüyor. Nasıl bir arka çubuk öğesi gibi görünmesini sağlayabilir ???
Dale

17

Gerçekten uzun bir başlığa sahip bir üst görünüm denetleyicim vardı. Bu, geri düğmesi metninin alt görünüm denetleyicisi başlığına kanamasına neden oldu.

Bir sürü farklı çözümü denedikten sonra, bunu yaptım (@ john.k.doe yaklaşımını genişleterek):

Xcode 7.2, Swift 2'yi kullanma

  1. Film Şeridi 'olarak, bir ekleme Navigation Itemiçin Veli View Controller sahnesi (alt VC)

gezinme öğesi

  1. On Attributes Inspectoryeni bir Navigation Item, bir yazın spacekarakter Back Buttonalanına. Bu konuyla ilgili daha sonra.

Hiyerarşiyi Görüntüle bölümündeki gezinme öğesi

Geri Düğmesi alanına boşluk karakteri ekleme

  1. In Veli görünümü denetleyicisi, aşağıdaki kodu ekleyin:

ön bilgi:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

Açıklama:

Geri düğmesi türü üst görünüm denetleyicisine aittir. Navigation ItemKodda veya Film Şeridi 'nde başlık ayarlayabilirsiniz böylece, size geri düğmesi için bir tanıtıcı verir.

Not:

Navigation Item Back ButtonMetni varsayılan boş dize olarak bırakırsanız, geri düğmesi başlığı "Geri" olur.

Diğer yaklaşımlar işe yarıyor, neden bunu kullanıyorsunuz ?:

Çocuk görünümü denetleyicisindeki geri düğmesi başlığını geçersiz kılmak mümkün olsa da, ekranda kısa bir süre yanıp sönene kadar bir tutamacı almak zor bir işti.

Bazı yaklaşımlar yeni bir geri düğmesi oluşturur ve mevcut olanı geçersiz kılar. Eminim işe yarıyor ve muhtemelen bazı kullanım durumlarında gerekli. Ancak mümkün olduğunda mevcut API'lardan yararlanmayı tercih ediyorum.

titleÜst görünüm denetleyicisinin değiştirilmesi, bazı durumlar için en hızlı çözümdür. Ancak, bu durum ana başlığı değiştirir, böylece durumu yönetmeniz gerekir. Tab Bar ControllerBaşlık değişiklikleri, Tab Bar Itembaşlıklarla yan etkilere neden olduğu için işler de karışıyor .


10

Film şeridi kullananlar için yalnızca üst öğeyi (hedef görünümü tutanı değil) görünüm denetleyici çerçevesini seçin (Gezinti çubuğunda sağ tıklayıp üç form girişi bulacağınız öznitelik denetçisini açtığınızdan emin olun. Üçüncü " geri düğmesi "arıyoruz.


4
yerelleştirmeyi önemsemiyorsanız bu en iyi çözümdür.
MiQUEL

7

Hızlı sürüm:

Çocuğunuzun ViewController'ında:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

bu aslında yığında önceki görünüm denetleyicisinin başlığını ideal olandan daha az olan "TEXT" olarak değiştirir.
gravitron

6

İşte bunu yapmanın başka bir yolu.

Üst görünüm denetleyicinizde aşağıdaki yöntemi uygulayın:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

Alt görünüm denetleyicinizde, başlığı değiştirmek istediğinizde, bu işe yarayacaktır:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

parentViewControllerMülkün çalışmasını asla sağlayamadım :

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

Bunun bir hata olup olmadığını bilmiyorum ya da düzgün kullanmıyorum. Ancak viewControllersdizideki ikinci-son görünüm denetleyicisini kapmak, üst görünüm denetleyicisini işaret eder ve bu başvuru ile üst yöntemleri doğru şekilde çağırabilirim.


6

tamam. Tüm bu seçeneklerden bizzat nefret ettim. Bu yüzden kendime geldim.

Gördüğüm bilgilere dayanarak. Önceki görünüm denetleyicisinin, itilen görünüm denetleyicisinde sunulacak olan kendi "Geri" düğmesinin denetiminde olduğu anlaşılıyor.

Değiştirilen Geri Düğmesini isteyen denetleyicideki navigationItem için bir Tembel Yükleme yöntemi oluşturdum.

Mine bir Davet Alıcı Denetleyicisidir

Alıcıyı Davet Et, varsayılan olarak ayarlanan metindir.

ancak geri düğmesinin Davet Edilmesi gerekiyordu

İşte geri düğmesini oluşturmak için kullandığım kod.

Bu kodu Denetleyicinin Implementatio (.m) dosyasının üstüne yerleştirdim ve süper yöntemini otomatik olarak geçersiz kıldı.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

Bunu başarmanın çok daha zarif bir yolu olduğunu düşünüyorum.

Bu kodu tek bir yere yerleştiriyorum ve gerektiğinde otomatik olarak dolduruluyor.

Her push isteğinden önce kodu çağırmanıza gerek yoktur.

Bu yardımcı olur umarım


5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

5

İşte cevap:

İçinde viewDidAppear:animated(DEĞİL) içinde viewDidLoadaşağıdakileri yapın

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

Geri düğmesinin şeklini korumak istiyorsanız.


Başlıkları değiştirdiklerini görebilmeleri dışında kötü değil. ViewWillAppear'da denedim ve çalışmıyor.
Travis

5

Burada açıklanan çözümlerin hiçbiri benim için işe yaramadı. Yaptığım şey, şu şekilde geldiğim sahneden başlığı kaldırmaktı:

self.title = @"";

Böylece yeni sahne sunulduğunda arka metin görünmez.

Ben kesinlikle bunun açık bir çözüm olmadığını, ama işe yaradığını ve açıklananların hiçbirinin benim için işe yaramadığını kabul ediyorum.


Dostum, sana söylemeliyim, 2017 ve geri düğmesinin üstesinden gelmek için hala bir $$. Metodun benim için çalıştı ve "İptal" kelimesini istediğim halde "<" işaretiyle sonlandırdım, ama elimde olana razı olacağım. :)
AnBisw

5

Bir sonraki görünüm denetleyicisine basmadan önce, gezinme yığınındaki geçerli görünüm denetleyicisinin başlığını geri düğmesinin istenen metnine değiştirmenin en iyi yol olduğunu gördüm.

Örneğin

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

Sonra viewDidAppear'da başlığı orijinal VC için istenen başlığa geri ayarlayın. İşte bu kadar!


5

Swift için:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton

4

Geri düğmesinin adını değiştirmenin en kolay yolunun, görünüm denetleyicilerinin başlığını geri düğmesinin başlığına ayarlamak ve daha sonra, görünüm denetleyicileri gezinme öğesindeki titleView öğesini gerçek bir etikete değiştirmek olduğunu gördüm adlandırın.

Bunun gibi:

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

Bu, UINavigationBar'daki başlığınızı yerelmiş gibi gösterecektir. Görünüm denetleyicisine ayrılmış başlık ve geri düğmesi başlığı verilebilmesi.

A ve B görüş kontrolörü için A, B görüntülenirken geri düğmesinin nasıl görünmesi gerektiğini anlatmaktan sorumludur.

EDIT: Bu aynı zamanda geri düğmesi yerel görünümünü korur (Sol oklu çubuk düğmesi öğesi).


4

Bu kod da çalışır. Bunu gezinti denetleyicisinin kök denetleyicisine yerleştirin:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

4

İOS'ta yeniyim ancak navigasyon denetleyici sınıfını geçersiz kılma konusunda çok basit bir cevap vereceğim. Ben itme ve pop yöntemleri basit geçersiz kılma ve önceki görünüm denetleyicisi başlığını kaydedin. Js bloğuna yapıştırma için üzgünüm. Normal kod bloğunda nasıl geçeceği konusunda biraz karışıktı.

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end


4

self.navigationController.navigationBar.backItem.title = @"TEXT";

Ve Swift'te:

self.navigationController?.navigationBar.backItem?.title = "TEXT"

3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

Parrent denetleyicisindeki kodda istediğiniz yere koyabilirsiniz, bu da farklı çocuk görünümleri için farklı düğmelere sahip olmanızı sağlar.


3

Çözümlerin çoğu, istenen başlığa sahip olağan bir düğme eklerken, orijinal BackButton stilini (sol oklu çubuk düğmesi) öldürür.
Bu yüzden orijinal stili korumak için 2 yol vardır:
1.: Yapmamayı tercih ettiğim belgesiz düğme stilini (110 veya benzeri bir şey) kullanmak. Ama isterseniz bunu nasıl yapacağınızı burada bulabilirsiniz.
2: Ben Trenskow'un fikrini kullanmak için. Beğendim ve biraz değişti kullanıyorum.
(NSString *) başlığını geçersiz kılmak yerine, orijinal başlığı aşağıdaki şekilde tutmaya karar verdim (bu da nib başlıklarını kullanmam ve btw push durumunda verilen başlığı kullanmamı sağlıyor).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

Bu çözüm iyi çalışıyor ve yerel görünüyor. Ayrıca viewDidLoad yönteminde kullanılırsa 1 kereden fazla yürütmeyi engeller.
Ayrıca bir Jessedc'in çözümünü denedim ama kötü görünüyor. Bu, kullanıcı başlık çubuğunun orijinalden BackButton'a istenen ve arkadan anında değişmesine neden olur.


2

Bu benim için daha önce gönderilen cevapların "basitleştirilmiş" versiyonu olarak çalışır.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Ebeveyn görünümü Kontrolörün içinde (tablo görünümü veya UITableViewController vardır mesela görünümü), kod koymak unutmayın değil çocuk veya ayrıntı görünümü (örn UIViewController).

Geri düğmesi dizesini şu şekilde kolayca yerelleştirebilirsiniz:

backButton.title = NSLocalizedString(@"Back Title", nil);

2

İki VC A ve B'ye sahibiz.

B'deki başlığı değiştirmek istiyorsanız, bu kodu A

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

Swift 4.1 Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)

1

Stan'in cevabı en iyisiydi. Ancak, denetleyiciyi bir Sekme Çubuğu ile kullandığınızda ve denetleyicinin başlığını değiştirdiğinizde de bir sorun vardır, bu yüzden Sekme Çubuğunun başlığını da değiştirebilirsiniz. işlevinde .title. Cevap burada: (ARC ile bunları görünümün viewDidLoad'ına ekleyin)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

Ben kendimi kullanmak, ben böyle bir işlevi yapmak, sadece viewDidLoad bir satır kodu ile özelliği var.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}


1

SORUN: Gezinme çubuğundaki "Geri" metni değiştirilemez.

NEDEN: Üst görünüm denetleyicisindeki .title özniteliği nil (veya başlatılmamış) olarak ayarlandığından, bir görünüm itildikten sonra gezinme çubuğunda "Geri" etiketi ayarlanır.

BİR ÇÖZÜM: self.title = "Whatever ..." ayarını yaparsanız, yeni görünüm denetleyicisini ittikten sonra "Back" yerine "Whatever ..." ifadesinin göründüğünü göreceksiniz.

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.