Swift'te düğme metni nasıl ayarlanır?


207

Geri düğmesi metnini nasıl kaldırırsınız?

Geçerli geri düğmesi:

<Geri

İstenen geri düğmesi:

<AnythingElse

Bunların hiçbiri işe yaramadı:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

Yanıtlar:


604

Geri düğmesi , ekranda görüntülenmekte olan düğmeye değil, önceki görünüm denetleyicisine aittir .
Geri düğmesini değiştirmek için , segue'i başlatan görünüm denetleyicisinde, itmeden önce güncellemeniz gerekir :

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

Hızlı 3, 4 ve 5:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

VEYA

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)

9
Çok teşekkürler, sadece bu küçük detay için kaç saat harcadığımı bilmiyorsunuz (önceki kontrolör)
Ricardo

3
Milyonlarca kez vekalet edebilseydim. Neden çalışmadığını merak etmek için ne kadar zaman harcadığımı söyleyemem (daha önce hedef denetleyicisindeydi)
Dylan Ireland

13
"Geri düğmesi önceki görünüm denetleyicisine ait" Bu konu hakkında bulduğum en değerli cevap! Teşekkür ederim!
vhristoskov

1
Ayarlama sadece geri düğmesini değil title, başlığı değiştirir .
Yariv Nissim

4
NavigationItem.backBarButtonItem = backItem yerine self.navigationController! .NavigationBar.topItem! .BackBarButtonItem = backItem ekledim ve Swift 3'te iyi çalışıyor. Teşekkür ederim
Indra Adam

125

Arayüz oluşturucusundan aşağıdaki gibi yapabilirsiniz:

önceki görünüm denetleyicisinin gezinme öğesini tıklayın

resim açıklamasını buraya girin

Özellik denetçisinden geri düğmesi metnini istediğiniz gibi ayarlayın. Bu kadar!!

resim açıklamasını buraya girin


1
nil 'atamanın en iyi yolu nedir?
kennydust

@kennydust Şunu mu demek istediniz: blank title
Ajinkya Patil

8
@kennydust evet geri düğmesine boşluk ekleyin ve enter tuşuna basın
Ajinkya Patil

Güzel ve kolay, ama yerelleştirilebilir mi?
Gruntcakes

2
@AjinkyaPatil Bunu denedim ama Geri düğmesi görünmüyor. Bunun olmasının bir nedeni var mı?
user805981

48

Geri düğmesi metni, üst görünüm denetleyicisinin gezinme öğesi başlığından alınır. Dolayısıyla, önceki görünüm denetleyicisinin gezinme öğesi başlığında ayarladığınız her şey, geçerli görünüm denetleyicisinin geri düğmesi metninde gösterilir. Üst görünüm denetleyicisinin viewWillAppear yöntemine gezinme öğesi başlığı olarak "" koyabilirsiniz.

self.navigationItem.title = ""

Başka bir yol koymak

self.navigationController?.navigationBar.topItem?.title = ""

geçerli görünüm denetleyicisinin viewWillAppear yönteminde. Gezinti yığını çok fazla yuvalanmışsa, bu başka bir soruna neden olur.


5
self.navigationItem.title = "" en iyi yanıt olarak en üstte olmalı!
rilar

Yukarıdaki tüm cevapların navigasyon öğesine bir hedef işlevi eklemesini gerektirdiği için bunu kabul ediyorum, bu yüzden sadece metni değiştirmekle kalmıyorlar, aynı zamanda soru için gerekli olmayan özel bir pop işlevi de ekliyorlar!
IsPha

Bu iyi çalışıyor prepareForSegue, yani. biraz daha temiz çünkü yüklendikten sonra yeni viewController'ı değiştirmiyorsunuz.
Adrian

Çok dikkat!!! self.navigationItem.title = "" çağrılmadan önce self.title = "....." koy
Bary Levy

45

Sen bu kod 3 satır koyabilirsiniz içindeViewController geri düğmesi başlığını değiştirmek istiyorum.

Sizin override func viewDidLoad() {}.

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
Bu çözüm daha doğru görünüyor, çünkü mantığı ayrıldığınız VC'ye değil, gelen VC'ye koydunuz. Aka: daha iyi okur.
eonist

37

Görünüm denetleyicisi için xib dosyası kullanıyorsanız, bunu görünüm denetleyicisi sınıfınızda yapın.

class AboutUsViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    edgesForExtendedLayout = []
    setUpNavBar()
}

func setUpNavBar(){
    //For title in navigation bar
    self.navigationController?.view.backgroundColor = UIColor.white
    self.navigationController?.view.tintColor = UIColor.orange
    self.navigationItem.title = "About Us"

    //For back button in navigation bar
    let backButton = UIBarButtonItem()
    backButton.title = "Back"
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}

}

Sonuç:

resim açıklamasını buraya girin


29

Sorunuza koyduğunuz yöntemleri nerede kullandığınızı bilmiyorum ama ViewControllersınıfımda (geri düğmesini değiştirmek istediğim), viewDidLoad()işlevde, aşağıdaki satırda kullanırsam istenen sonucu alabilirim :

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

Sonuç:

Önce

resim açıklamasını buraya girin

Sonra

resim açıklamasını buraya girin


3
Benim durumumda bu kod parçasını viewDidAppear yöntemine yerleştirirseniz ve viewDidLoad one'a yerleştirirseniz çalıştı
apinho

2
navigationController.navigationBar.topItem?.title = ""Bunu koymaktan kaçınmak için kullanınviewDidAppear
José

Bu en tatmin edici yol gibi görünür ve çağrı düğmesinde (daha yavaş cihazlar) geri düğmesi başlığı "" kullanarak self.navigationItem.title = "" kullanılarak "flaş" olarak değiştirilir. Ayrıca self.navigationItem.title = "", bir sekme denetleyici sekme anahtarı aracılığıyla programlı olarak hızlı bir şekilde görünüm denetleyicisine geçiş yaparak tamamen yok sayılır.
FlimFlam Vir

22

Geri düğmesi, ekranda görüntülenmekte olan düğmeye değil, önceki görünüm denetleyicisine aittir. Geri düğmesini değiştirmek için basmadan önce güncellemeniz gerekir, viewdidload ekleyin:

Hızlı 4:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

12

Sadece storyboard'da NavigationItem öğesini değiştirebilirsiniz.

resim açıklamasını buraya girin

Geri Düğmesine bir boşluk ekleyin ve Enter tuşuna basın.

Not: Bunu önceki VC'de yapın.


8

Swift 4 - Herhangi bir görünüm denetleyicisine basmadan önce geri düğmesini yapılandırın

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

Bu çalışmalı:

override func viewDidLoad() {
    super.viewDidLoad()

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
    self.navigationItem.backBarButtonItem = button

}

func goBack()
{
    self.navigationController?.popViewControllerAnimated(true)
}

Bu aslında backButton'un yerini aldığı için önerilmese de ve geri oku ve tokatlamak hareketini de kaldırdı.


10
Bunu yapmanın doğru yolu değil, sadece geri düğmesini değiştiriyorsunuz
Yariv Nissim

Arayüz oluşturucusundan yapmak daha iyi
Rutger Huijsmans

7

Hızlı 4.2

Gezinme çubuğu geri düğmesi öğesi metnini değiştirmek istiyorsanız, geri düğmesinin viewDidLoadgöründüğünden ÖNCE, geri düğmesinin görünür olduğu görünüm denetleyicisine DEĞİL, bunu denetleyicinin içine koyun .

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

Geçerli gezinme çubuğu başlık metnini değiştirmek istiyorsanız aşağıdaki kodu kullanın (bunun gezinti denetleyicisine itilen SONRAKİ görünümü için varsayılan arka metin haline geldiğini, ancak bu varsayılan arka metnin yukarıdaki kod tarafından geçersiz kılınabileceğini unutmayın)

 self.title = "Navigation Bar Title"

6

İki yol var.

1. previousViewController.viewDidLoad () içinde

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

CurrentViewController.viewDidAppear () içinde

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

Sebep: backButtongelmektedir navigationBar.backItem.backBarButtonItem, bu nedenle ilk yolu obvious.In currentViewController.viewDidLoad (), biz referansını alamıyor olan backItemviewDidAppear () içinde, çünkü navigationBaritti navigationViewonun üzerine stackbiz değişiklik yapabilirsiniz .bu backItemcurrentViewController içinde. viewDidAppear ()

Daha fazla ayrıntı için Belge: UINavigationBar öğesini görebilirsiniz.


3

In viewDidLoadyöntemine başvuran kontrolör eklenti:

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

2

bu cevaplar sorunu çözse de, bu yararlı olabilir

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

Hızlı 4

Segue için hazırlanmak için önceki söyleme doğru ve gerçek geri düğmesi önceki VC'ye ait olsa da, sadece bir grup daha gereksiz kod ekliyor.

Yapılacak en iyi şey, viewDidLoad'da geçerli VC'nin başlığını ayarlamaktır ve sonraki VC'de otomatik olarak geri düğmesi başlığını doğru şekilde ayarlar. Bu hat benim için çalıştı

navigationController?.navigationBar.topItem?.title = "Title"

2

Swift 5 için çalışır :

self.navigationItem.backBarButtonItem?.title = ""

Ekrandaki geçerli değil, bir sonraki itilen görünüm denetleyicisi için etkili olacağını lütfen unutmayın, bu yüzden çok kafa karıştırıcı!

Ayrıca, film şeridini kontrol edin ve önceki görünüm denetleyicisinin gezinme öğesini seçin, ardından Geri Düğmesine (Müfettiş) bir şey yazın.


1

Bu deneyin ... işe yarayacak ....

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

Yukarıdaki kod metni gizleyecek ve gezinme çubuğunda yalnızca geri oku gösterecektir.


0

self.title = "" Önce ayarlayın self.navigationController?.pushViewController(vc, animated: true).


0
override func viewWillAppear(_ animated: Bool) {

    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}

func goToNoteEditorViewController(){
   // action what you want
}

Umarım yardımcı olur!! #swift 3


0

Bir görünüm denetleyicisini sayfa görüntüleme denetleyicisi sayfasından aktarıyorsanız, gezinme denetleyicisinin geri düğmesi başlığını güncelleyemezsiniz. Bu sorunu çözmek için ana görünüm denetleyicinize bir temsilci oluşturun (ayrıca görünüm denetleyicisi hiyerarşisini üst öğeye geri döndürebilirsiniz).

Ayrıca, Geri düğmelerinin karakter sınırı vardır. Bu karakter sınırını aşarsanız, sistem varsayılan olarak "Geri" olacaktır. Senin için kısalmayacak. Örneğin:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

0

Hızlı 4

Benim durumumda çözüm, Çocuk Görüntüleme Denetleyicisine geçmeden önce Ana Görünüm Denetleyicisinin gezinme öğesini temizlemekti. Ve tekrar gösteriliyorsa tekrar ayarlayın

MasterController

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

Ve bu şekilde bir UIViewController'ı itip alt denetleyicideki geri çubuğu düğmesi öğesini temizliyorum:

MasterController

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)

0

Swift 4.2 için

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem

0

GOTCHA: Birçok rol aldı önerilerden hiçbirini ile sorun yaşıyorsanız, size kayıt sağlamak UITableViewCellolduğundan da viewDidLoad()değil itibaren,init()


-1

Swift 5'te çözüm kontrol edildi ve çalışıyor

Aşağıda farklı durumlar için birkaç çözüm koydum:

1. Metni geri düğmesinden kaldırın

Metni geri düğmesinden kaldırmak için en iyi çözüm viewDidLoad () öğesine eklemektir:

navigationItem.backBarButtonItem = UIBarButtonItem()

2. Geri düğmesine kendi metninizi ayarlayın

Kendi başlığınızı ayarlamak istiyorsanız, backButton başlığını ayarlayarak bunu yapın:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3. Tüm VC'deki boş geri düğmesi

Tüm uygulamada ortak bir stil oluşturmak istiyorsanız - metin olmadan sadece geri ok yapmak için, tüm Görünüm Denetleyicileriniz için temel VC oluşturun:

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

Yukarıda sunulan çözüm, ek değişken ekleyip belirli ViewController'da geçersiz kılmak suretiyle daha sonra bir istisna yapmak isterseniz gelecekte geri düğmesini özelleştirmenizi sağlar: f.ex:

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

hızlı 4

backButton'daki metni geçerli görünümden programlı olarak değiştirmenin bir yolu vardır:

navigationController?.navigationBar.items![0].title = "some new text"
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.