Swift에서 버튼 텍스트를 다시 설정하는 방법


207

뒤로 버튼 텍스트를 어떻게 제거합니까?

현재 뒤로 버튼 :

<뒤로

원하는 뒤로 버튼 :

<아무거나

이 중 어느 것도 효과가 없었습니다.

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

답변:


604

뒤로 버튼은 현재 화면에 표시되는 것이 아니라 이전 뷰 컨트롤러에 속합니다 .
뒤로 버튼을 수정하려면 segue를 시작한 뷰 컨트롤러에서 푸시 하기 전에 업데이트해야합니다 .

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
}

스위프트 3, 4 및 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
}

또는

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

9
고마워, 당신은 내가 그 작은 세부 사항 (이전 컨트롤러)에 대해 얼마나 많은 시간을 소비하는지 몰라
Ricardo

3
내가 100 만 번 투표 할 수 있다면 왜 작동하지 않았는지 궁금해하는 데 얼마나 오래 걸 렸는지 말할 수 없습니다 (이전에 대상 컨트롤러에 있음)
Dylan Ireland

13
"뒤로 버튼은 이전보기 컨트롤러에 속합니다"는이 주제에서 찾은 가장 귀중한 답변입니다! 감사합니다!
vhristoskov

1
(가) 설정 title변경 제목 , 그냥 뒤로 버튼을.
Yariv Nissim

4
navigationItem.backBarButtonItem = backItem 대신 self.navigationController! .navigationBar.topItem! .backBarButtonItem = backItem을 추가했으며 Swift 3에서 제대로 작동합니다. 감사합니다.
Indra Adam

125

다음과 같이 인터페이스 빌더에서이를 수행 할 수 있습니다.

이전보기 컨트롤러의 탐색 항목을 클릭하십시오

여기에 이미지 설명을 입력하십시오

속성 관리자에서 뒤로 버튼 텍스트를 원하는 것으로 설정하십시오. 그게 다야 !!

여기에 이미지 설명을 입력하십시오


1
'nil'을 할당하는 가장 좋은 방법은 무엇입니까?
kennydust

@kennydust 빈 제목을 의미합니까?
Ajinkya Patil

8
@kennydust 예 뒤로 버튼에 공간을 추가하고 Enter를 누르십시오
Ajinkya Patil

훌륭하고 쉬운데 현지화가 가능합니까?
Gruntcakes

2
@AjinkyaPatil이 작업을 시도했지만 뒤로 버튼이 표시되지 않습니다. 이것이 왜 그런가?
user805981 2016 년

48

뒤로 버튼 텍스트는 상위 뷰 컨트롤러의 탐색 항목 제목에서 가져옵니다. 따라서 이전보기 컨트롤러의 탐색 항목 제목에서 설정 한 내용은 현재보기 컨트롤러의 뒤로 단추 텍스트에 표시됩니다. 상위 뷰 컨트롤러의 viewWillAppear 메소드에서 탐색 항목 제목으로 ""를 넣을 수 있습니다.

self.navigationItem.title = ""

또 다른 방법은

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

현재 뷰 컨트롤러의 viewWillAppear 메소드에서 탐색 스택이 너무 중첩 된 경우 다른 문제가 발생합니다.


5
self.navigationItem.title = ""이 최고의 답변입니다.
rilar

위의 모든 답변이 탐색 항목에 대상 기능을 추가해야하기 때문에 최선의 답변이므로 동의합니다. 따라서 텍스트를 변경하는 것이 아니라 사용자 정의 팝 기능도 추가하므로 질문에 필요하지 않습니다!
IsPha

이것은에서 잘 작동합니다 prepareForSegue. 로드 후 새 viewController를 변경하지 않기 때문에 조금 더 깔끔합니다.
Adrian

주의! self.navigationItem.title = ""를 호출하기 전에 self.title = "....."넣기
Bary Levy

45

이 3 줄의 코드 ViewController 뒤로 버튼 제목을 변경하려는 곳에 넣을 수 있습니다 .

당신의 override func viewDidLoad() {}.

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

2
이 솔루션은 떠나는 VC가 아닌 도착하는 VC에 로직을 넣을 때 더 정확 해 보입니다. 일명 : 더 잘 읽습니다.
eonist

37

뷰 컨트롤러에 xib 파일을 사용하는 경우 뷰 컨트롤러 클래스에서이 작업을 수행하십시오.

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
}

}

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오


29

나는 당신이 당신의 질문에 넣은 메소드를 어디에서 사용했는지 알지 못하지만 ViewController클래스 (뒤로 버튼을 변경하려는)에서 viewDidLoad()함수에서 다음 줄을 사용하면 원하는 결과를 얻을 수 있습니다 .

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

결과는 다음과 같습니다.

전에

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


3
제 경우에는 viewDidLoad가 아닌 viewDidAppear 메소드에이 코드 조각을 배치 한 경우에만 작동했습니다.
apinho

2
navigationController.navigationBar.topItem?.title = ""이것을 사용 하지 않으려면 대신 사용하십시오viewDidAppear
José

이는 가장 만족스러운 방법으로 보이고 호출 컨트롤러 (느린 장치)에서 뒤로 버튼 제목이 ""using self.navigationItem.title = ""로 변경되어 플래시를 피합니다. 또한 self.navigationItem.title = ""가 프로그래밍 방식으로 탭 컨트롤러 탭 스위치를 통해 뷰 컨트롤러로 빠르게 전환되는 것을 완전히 무시하는 다른 상황도 완전히 무시됩니다.
FlimFlam Vir

22

뒤로 버튼은 현재 화면에 표시되는 것이 아니라 이전 뷰 컨트롤러에 속합니다. 뒤로 버튼을 수정하려면 밀어 넣기 전에 업데이트해야합니다. viewdidload를 추가하십시오.

스위프트 4 :

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

12

스토리 보드에서 NavigationItem을 수정할 수 있습니다

여기에 이미지 설명을 입력하십시오

뒤로 단추에서 공백을 추가하고 Enter를 누르십시오.

참고 : 이전 VC에서이 작업을 수행하십시오.


8

스위프트 4- 뷰 컨트롤러를 푸시하기 전에 뒤로 버튼 구성

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

이것은 작동해야합니다 :

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

이것이 실제로 backButton을 대체하기 때문에 권장되지 않지만 back arrow와 swipe 제스처도 제거했습니다.


10
올바른 방법이 아니라 뒤로 버튼을 교체하는 것입니다.
Yariv Nissim

인터페이스 빌더에서 더 나은
Rutger Huijsmans

7

스위프트 4.2

탐색 표시 줄 뒤로 단추 항목 텍스트를 변경 viewDidLoad하려면 뒤로 단추가 표시되는보기 제어기가 아니라 뒤로 단추가 표시되는 항목보다 먼저 제어기에이를 입력하십시오.

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

현재 탐색 표시 줄 제목 텍스트를 변경하려면 아래 코드를 사용하십시오 (이것은 탐색 제어기로 푸시 된 NEXT보기의 기본 뒷 텍스트가되지만이 기본 뒷 텍스트는 위의 코드로 대체 될 수 있습니다)

 self.title = "Navigation Bar Title"

6

두 가지 방법이 있습니다.

1. previousViewController.viewDidLoad ()에서

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

2. currentViewController.viewDidAppear ()에서

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

이유 : backButton에서 오는 navigationBar.backItem.backBarButtonItem첫 번째 방법은 obvious.In currentViewController.viewDidLoad () 그래서, 우리의 참조를 얻을 수 없습니다, backItemviewDidAppear ()에서 때문에, navigationBar추진 navigationView에 그stack 우리가 변경할 수 있습니다 .so를backItem currentViewController에 있습니다. viewDidAppear ()

자세한 내용은 Document : UINavigationBar를 참조하십시오 .


3

제시 컨트롤러viewDidLoad방법에서 다음 추가하십시오.

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

2

이 답변으로 문제가 해결되지만 유용 할 수 있습니다.

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

스위프트 4

이전에 segue를 준비하라는 말은 정확하고 뒤로 버튼은 이전 VC에 속하지만 불필요한 코드를 더 추가합니다.

가장 좋은 방법은 viewDidLoad에서 현재 VC의 제목을 설정하는 것이며 다음 VC에서 자동으로 뒤로 버튼 제목을 설정합니다. 이 라인은 나를 위해 일했다

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

2

이것은 스위프트 5에서 작동합니다 .

self.navigationItem.backBarButtonItem?.title = ""

디스플레이의 현재 뷰 컨트롤러가 아닌 다음 푸시 뷰 컨트롤러에 효과적이므로 매우 혼란 스럽습니다!

또한 스토리 보드를 확인하고 이전 뷰 컨트롤러 의 탐색 항목을 선택한 다음 뒤로 버튼 (검사기)에 무언가를 입력하십시오.


1

시도해보십시오 ... 작동합니다 ....

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

위의 코드는 텍스트를 숨기고 탐색 모음에 뒤로 화살표 만 표시합니다.


0

self.title = "" 전에 설정하십시오 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
}

그것이 도움이되기를 바랍니다! #swift 3


0

페이지보기 컨트롤러 페이지에서보기 컨트롤러를 푸시하는 경우 탐색 컨트롤러의 뒤로 단추 제목을 업데이트 할 수 없습니다. 이 문제를 해결하려면 부모 뷰 컨트롤러에 대한 델리게이트를 다시 생성하십시오 (뷰 컨트롤러 계층을 다시 부모로 트래버스 할 수도 있음).

또한 뒤로 버튼에는 문자 제한이 있습니다. 해당 문자 제한을 초과하면 시스템은 기본적으로 "뒤로"로 설정됩니다. 당신을 위해 잘리지 않습니다. 예를 들면 다음과 같습니다.

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

0

스위프트 4

필자의 경우 해결책은 Child View Controller로 이동하기 전에 Master View Controller의 탐색 항목을 지우는 것이 었습니다. 다시 표시되면 다시 설정하십시오.

MasterController

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

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

그리고 이것은 UIViewController를 푸시하고 자식 컨트롤러에서 백 바 버튼 항목을 지우는 방법입니다.

MasterController

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


0

GOTCHA : 별표가 많은 제안 중 하나라도 문제가있는 경우에서 님이 아닌 UITableViewCell의에 등록하십시오.viewDidLoad()init()


-1

솔루션 확인 및 작업 Swift 5

아래에는 다른 경우에 대한 몇 가지 해결책을 제시했습니다.

1. 뒤로 버튼에서 텍스트를 제거

뒤로 버튼에서 텍스트를 제거하는 가장 좋은 해결책은 viewDidLoad ()에 추가하는 것입니다.

navigationItem.backBarButtonItem = UIBarButtonItem()

2. 뒤로 버튼에 자신의 텍스트를 설정

자신의 제목을 설정하려면 backButton의 제목을 설정하여 제목을 설정하십시오.

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

3. 모든 VC에서 빈 뒤로 버튼

전체 앱에서 공통 스타일을 만들려면 텍스트없이 화살표 만 다시 표시하려면 모든 View Controller에 대한 기본 VC를 만듭니다.

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

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

위에 제시된 솔루션을 사용하면 나중에 추가 변수를 추가하고 특정 ViewController 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

스위프트 4

현재 viewController에서 프로그래밍 방식으로 backButton의 텍스트를 변경하는 방법 중 하나가 있습니다.

navigationController?.navigationBar.items![0].title = "some new text"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.