Yanıtlar:
Gönderen bu bağlantı :
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
Tyler'ın yorumlarda söylediği gibi:
bunu görünür görünüm denetleyicisinde değil, geri düğmesine bastığınızda göreceğiniz görüntü denetleyicisinde
release
UIBarButtonItem
UIBarButtonItemStyleBordered
özelliğe yapılan bir çağrı ile değiştirin self.navigationItem.backBarButtonItem.style
. Belgeler: developer.apple.com/library/ios/documentation/uikit/reference/…
Metni Arayüz Oluşturucu'da ayarlayabilirsiniz:
ViewController'ın geri düğmesinin döneceği gezinme öğesini seçin:
Yardımcı programlar paneli özellik denetçisinde Geri Düğmesi için etiketinizi girin:
Kabul edilen cevapta olduğu gibi koddaki başlığı ayarlamak yerine bu yaklaşımı tercih ederim.
Ayrıca, görünüm denetleyicide yığını bir düzey yukarı yapmanız gerektiğini unutmayın. Başka bir deyişle, bunu görünür görünüm denetleyicisinde değil, geri düğmesine basıp basmadığınızı göreceğiniz görünüm denetleyicisinde yapın.
--Tyler
Bunu kullanıyorum:
// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.backItem.title = @"Custom text";
}
Yığına başka bir denetleyiciyi itmeden önce denetleyicinin başlığını ayarlayarak bunun için kullanışlı bir çözüm buldum:
self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
Ardından, orijinal başlığı şu şekilde ayarladığınızdan emin olun viewWillAppear
:
-(void)viewWillAppear:(BOOL)animated
{
...
self.navigationItem.title = @"Original Title";
...
}
Bu, UINavigationController
bir push işlemi sırasında geri düğmesini oluştururken varsayılan davranışın önceki denetleyiciden başlık kullanmak olduğu için çalışır.
Geri düğmesinin başlığı varsayılan olarak önceki görünümün başlığına ayarlanır, bu nedenle kullandığım hızlı bir numara aşağıdaki kodu önceki görünümün .m dosyasına yerleştirmektir.
-(void)viewWillAppear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Original Title";
}
-(void)viewWillDisappear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Back";
}
init yönteminize aşağıdaki kodu ekleyin:
- (id)initWithStyle:(UITableViewStyle)style {
if(self = [super init]) {
//...
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBack)];
self.navigationItem.leftBarButtonItem = customBackButton;
[customBackButton release];
//...
}
return self;
}
daha sonra viewcontroller'ın işten çıkarılmasına izin vermek için basit bir yöntem ekleyin:
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
ViewDidLoad veya loadView içine aşağıdaki kodu ekleyin
self.navigationController.navigationBar.topItem.title = @"Custom text";
İOS 9 ile iPhone ve iPad'de test ettim
navigationController
ve topItem
özellikleri üzerinde isteğe bağlı zincirleme , örneğin:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Dizinin cevabına ekleme. Apple'ın belgelerinden backBarButtonItem bildiriminin şu olduğuna dikkat edin :
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
Bu nedenle, rein'in cevabı bellek sızdırır, çünkü sentezlenmiş ayarlayıcı retain
onu geçtiğiniz örnek olur ve bu hiçbir zaman açıkça serbest bırakılmaz. Bunu kullanarak bunu çözebilirsiniz.autorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
Ya da bir değişkeni örneğe işaret edebilirsiniz, böylece daha sonra açıkça serbest bırakabilirsiniz:
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
Bu yardımcı olur umarım!
İlginç bir şey keşfettim. Eğer yöntemi alt sınıfı UINavigationController
ve geçersiz kılar pushViewController:animated:
ve böyle bir şey yaparsanız: (ARC kullandığımı unutmayın)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
Daha sonra ViewControllers
navigasyon kontrol cihazınızla itilen herkes için otomatik olarak "Geri" düğmesine sahip olacaktır. Belirli görünüm denetleyicilerinin metnini değiştirmek isterseniz, viewcontroller'ı belirli bir sınıfa veya kendi özel protokolünüze (viewcontroller'ınızın böyle bir yöntem backButtonText
veya bunun gibi aptalca bir şey içerebileceği miras ) atayabilirsiniz. viewcontroller'da gelen ve geri düğmesi metnini özelleştirebileceğiniz belirli bilgiler. Şimdi geri düğmesi metni sadece sorumluluğu elinde tutması gereken bir yerde halledilir. İtiraf etmeliyim ki metni değiştirmek için yeni bir düğme yaratılması berbat, ama iyi.
Herkes neden böyle yapmamanın bir nedeni düşünebilir? En azından görünüm denetleyicisi başlıkları ile uğraşmanız veya gezinme denetleyicisindeki görünüm denetleyicisine basmadan önce yeni bir geri düğmesi oluşturmayı hatırlamanız gerekmez.
dizinin cevabı iyi çalışıyor.
Birden fazla görünüm denetleyicisine basarsanız, her biri için değiştirilen geri düğmesi başlığının görüneceğini unutmayın; bu, istediğiniz gibi olmayabilir.
Bu durumda, bir görünüm denetleyicisine her bastığınızda özel UIBarButtonItem öğesini oluşturmanız gerekir.
Ayrıca, görünüm denetleyicisini itmeden önce bunu yaptığınızdan emin olun , aksi takdirde başlık değiştikçe bir ekran hıçkısı alırsınız.
Aubrey'nin önerisine genişleyerek, bunu çocuk görünümü denetleyicisinde yapabilirsiniz:
ebeveynin navigationItem.title ve ebeveynin navigationItem öğelerinin eski değerlerini saklamak için iki değişken oluşturun
UINavigationItem* oldItem;
NSString* oldTitle;
alanına viewDidLoad
aşağıdakileri ekleyin:
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
alanına viewWillDisappear
aşağıdakileri ekleyin:
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
Mükemmel değil. Yeni denetleyicinin animasyonu sırasında üst görünümün başlığının değiştiğini göreceksiniz. AMA bu, geri düğmesini özel olarak etiketleme ve standart bir geri düğmesi gibi şekillendirme amacına ulaşır.
Bunu sana koy viewDidLoad
, umarım aradığın şeyle sonuçlanır
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
hızlı 3'te GELEN denetleyicide (bazen daha mantık ..) başlık ayarlamak istiyorsanız:
func setBackButtonNavBar(title: String, delay: Double){
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in
if let navBar = self.navigationController?.navigationBar{
navBar.backItem?.title = title
}
})
}
yaklaşan denetleyicide:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
genellikle self.setBackButtonNavBar'ı bir denetleyici uzantısına koydum.
Bunun eski bir soru olduğunu ve cevapların türünün güncellendiğini biliyorum!
Bunun kolay yolu bunu üst ViewController'da yapmaktır:
yani sizi bir sonraki görünüm denetleyicisine götüren.
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)
Bunu kodda yapmak, geri düğmesi stilini kaldırın UINavigationConroller
. Görünümlerinizin her birine bir Gezinme Öğesi eklerseniz, öğesindeki arka düğmenin başlığını ayarlayabilirsiniz StoryBoard
.
self.navigationController.navigationBar.topItem.title = @"Custom text";