Programing

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

crosscheck 2020. 5. 19. 21:35
반응형

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


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

current back button: <Back
desired back button: <AnythingElse

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

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

뒤로 버튼은 현재 화면에 표시되는 것이 아니라 이전 뷰 컨트롤러에 속합니다 .
뒤로 버튼을 수정하려면 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 :

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

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

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

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

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

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


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

self.navigationItem.title = ""

또 다른 방법은

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

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


뷰 컨트롤러에 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
}

}

결과는 다음과 같습니다.

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


이 3 줄의 코드를에 넣을 수 있습니다 override func viewDidLoad() {}.

let backButton = UIBarButtonItem()

backButton.title = "name"

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

I do not know where you have used your methods that you put on your question but I could get the desired result if I use, on my ViewController class (in which I want to change the back button), on viewDidLoad() function, the following line:

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

The result will be:

Before

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

After

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


The back button belongs to the previous view controller, not the one currently presented on screen. To modify the back button you should update it before pushing, add viewdidload :

Swift 4:

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

You can just modify the NavigationItem in the storyboard

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

In the Back Button add a space and press Enter.

Note: Do this in the previous VC.


This should work:

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

Although it is not recommended since this actually replaces the backButton and it also removed the back arrow and the swipe gesture.


Swift 4 - Configure the back button before pushing any view controllers

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

Swift 4.2

If you want to change the navigation bar back button item text, put this in viewDidLoad of the controller BEFORE the one where the back button shows, NOT on the view controller where the back button is visible.

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

If you want to change the current navigation bar title text use the code below (note that this becomes the default back text for the NEXT view pushed onto the navigation controller, but this default back text can be overridden by the code above)

 self.title = "Navigation Bar Title"

In the viewDidLoad method of the presenting controller add:

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

Swift 4

While the previous saying to prepare for segue is correct and its true the back button belongs to the previous VC, its just adding a bunch more unnecessary code.

The best thing to do is set the title of the current VC in viewDidLoad and it'll automatically set the back button title correctly on the next VC. This line worked for me

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

Try this... it will work ....

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

The above code will hide the text and show only the back arrow on navigation bar.


although these answers fix the problem but this could be some useful

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)

    }

}

Set self.title = "" before self.navigationController?.pushViewController(vc, animated: true).


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
}

Hope it helps!! #swift 3


If you are pushing a view controller from page view controller page, you cannot update the navigation controller's back button title. To solve this create a delegate back to your parent view controller (you may also be able to traverse the view controller hierarchy back up to the parent).

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

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

스위프트 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)

스위프트 4.2

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

스위프트 4

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

navigationController?.navigationBar.items![0].title = "some new text"

참고 URL : https://stackoverflow.com/questions/28471164/how-to-set-back-button-text-in-swift

반응형