아이콘을 유지하면서 뒤로 버튼에서 텍스트 제거
뒤로 버튼에서 텍스트를 제거하고 싶지만 아이콘은 유지하고 싶습니다. 나는 시도했다
let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton
그러나 이렇게하면 텍스트와 아이콘이 완전히 제거됩니다.
@ rmd2의 방법은 거의 옳지 만 대신 뒤로 버튼이 가리키는 컨트롤러의 탐색 모음을 선택 " "
하고 뒤로 버튼 필드에 입력해야 합니다.
이미 답이 있다는 것을 알고 있지만 코드로도 할 수 있습니다 (펜촉으로 작업하는 경우)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
첫 번째 뷰 컨트롤러에 위를 추가하십시오.
푸시하는 각 뷰 컨트롤러에 대해이 작업을 수행해야합니다. 따라서 3 개의 뷰 컨트롤러가 있고 이들 모두에서 백 텍스트를 제거하려면 뷰 컨트롤러 1과 2에 줄을 추가해야합니다.
당신이 밀어 뷰 컨트롤러에서 뒤로 버튼의 제목을 제거하고 싶다면,의 말을하자 <Settings
에 <
subSettingsViewController에서 다음 설정했습니다 backBarButtonItem의 SettingsViewController의에서 제목을 viewWillDisappear () 방법.
목표 -C :
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
}
빠른:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
뒤로 버튼의 텍스트는 마스터보기의 제목에 따라 다릅니다.
요령은 마스터 뷰가 사라지면 제목을 지우고 다시 표시되면 다시 설정하는 것입니다.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
// needed to clear the text in the back navigation:
self.navigationItem.title = " "
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "My Title"
}
제 경우에는 사용자 정의 아이콘과 제목에 대해 이것이 트릭을 수행했습니다 (Swift 4).
let imgBack = UIImage(named: "ic_back")
navigationController?.navigationBar.backIndicatorImage = imgBack
navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack
navigationItem.leftItemsSupplementBackButton = true
navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
뒤로 화살표를 원하면 다음 코드를 AppDelegate 파일에 didFinishLaunchingWithOptions 메서드에 넣습니다.
Swift 용
let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)
많이 검색 한 후 가장 좋고 간단한 해결책을 찾았습니다. 이것은 Swift 4.2로 작성된 모든 viewController에 영향을 미칩니다.
extension UIViewController {
open override func awakeFromNib() {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
이전 ViewController의 StoryBoard Title에 ""를 추가하여이 문제를 해결했습니다. 공백이 아닌 단지 공백; D
마침내 완벽한 솔루션을 찾았습니다.
투명한 이미지 하나를 추가하고 AppDelegate에 다음 코드를 추가하기 만하면됩니다.
UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
들어 스위프트 4+ 이 줄을 넣어 AppDelegate
에서didFinishLaunchingWithOptions
let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
신속한 4
self.navigationController?.navigationBar.topItem?.title = ""
ViewControllerA가 있고 ViewControllerB로 이동하려면 ViewControllerA에서 현재 navigationItem을 새 UIBarButtonItem으로 설정하고 제목을 공백이있는 문자열로 설정 한 후 다른보기 컨트롤러로 푸시해야합니다.
제목을 공백이있는 문자열로 설정하십시오. 기본값이 nil이므로 nil 또는 ""(빈 문자열)를 설정할 수 없습니다.
let backItem = UIBarButtonItem()
backItem.title = " "
navigationItem.backBarButtonItem = backItem
let controllerB = ViewControllerB()
navigationController?.pushViewController(controllerB, animated: true)
let button: UIButton = UIButton (type: UIButtonType.Custom)
button.setImage(UIImage(named: "imageName"), forState: UIControlState.Normal)
button.addTarget(self, action: "backButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside)
button.frame = CGRectMake(0, 0, 30, 30)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.leftBarButtonItem = barButton
func backButtonPressed(btn : UIButton) {
// Your code
}
탐색 컨트롤러 스택의 모든 뷰 컨트롤러에서 제거하려면 :
UINavigationController 하위 클래스를 만들고 다음을 추가합니다.
override func show(_ vc: UIViewController, sender: Any?) {
setEmptyBackButton(vc)
super.show(vc, sender: sender)
}
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
setEmptyBackButton(viewController)
super.pushViewController(viewController, animated: animated)
}
func setEmptyBackButton(_ viewController: UIViewController) {
viewController.navigationItem.backBarButtonItem =
UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
이 코드를 각 VC에 넣으십시오.
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
제목이 긴 경우 제목 색상 만 변경하는 경우가 있습니다. 탐색 모음 제목이 왼쪽으로 이동할 수 있기 때문입니다. 따라서이를 방지하려면 바 버튼 제목을 투명하게 만드는 것 외에도 가로로 이동해야 할 수 있습니다.
let barButtonItemAppearance = UIBarButtonItem.appearance()
barButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
barButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
나를 위해 이것은 트릭을했습니다.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
self.navigationItem.title = " "
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "my amazing title"
navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .plain, target: nil, action: nil)
}
backBarButtonItem 을 수정하지 않고 제목 만 설정하면 작동하는 것처럼 보입니다 . 그러나 제스처를 사용하여 돌아 가려고 시도하고 취소 하고 푸시 된 뷰 컨트롤러에 머무르면 뒤로 제목이 다시 표시됩니다.
Swift 4 에서 작업하기
뒤로 버튼이 가리키는 컨트롤러의 탐색 모음을 선택하고 뒤로 버튼 필드에 ""를 입력해야합니다.
예를 들어 A 컨트롤러를 B 컨트롤러로 밀어 넣는 경우 A 컨트롤러 탐색 모음에 공백을 넣으십시오.
Xcode 10, Swift 4+
여기에있는 다른 사람들과 비슷한 대답이지만 텍스트가 여전히 지워지지 않으면 Space를 클릭 한 다음 Enter를 클릭해야한다는 점에 주목할 가치가 있습니다.
Swift가있는 Xcode 9.2에서는 다음과 같이 작동했습니다.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
이전 뷰 컨트롤러를 전혀 제어 할 수없는 경우 (즉, 프레임 워크에서 작업하는 경우) 다음과 같이 뒤로 버튼의 제목을 삭제할 수 있습니다.
// For iOS 10
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = String()
// For iOS 11
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = nil
이 기능은 탐색 스택의 마지막 항목으로 이동하여 뒷면 제목을 삭제합니다. 뷰 컨트롤러가 나타날 때 원본을 저장하십시오.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
originalBackButtonTitle = navigationController?.navigationBar.items?.last?.backBarButtonItem?.title
// Delete title somewhere here...
}
그런 다음 앱의 일부를 중단하지 않도록 다시 할당합니다.
override func viewWillDisappear(_ animated: Bool) {
navigationController?.navigationBar.items?.last?.backBarButtonItem?.title = originalBackButtonTitle
super.viewWillDisappear(animated)
}
이렇게하면 문제가 해결됩니다.
import UIKit
extension UINavigationController{
func customizeBackArrow(){
let yourBackImage = UIImage(named: "icon_back_arrow")
self.navigationBar.backIndicatorImage = yourBackImage
self.navigationBar.tintColor = Common.offBlackColor
self.navigationBar.backIndicatorTransitionMaskImage = yourBackImage
navigationItem.leftItemsSupplementBackButton = true
self.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "",
style: .plain, target: self, action: nil)
}
}
몇 가지 답변을 시도했지만 모든 경우에 작동하도록 할 수는 없습니다. 따라서 이것은 설정된 경우 탐색 모음의 제목에 영향을주지 않는 해결 방법입니다.
guard let items = viewController.navigationController?.navigationBar.items else { return }
for item in items {
if item.title == nil {
item.title = ""
}
}
세부
- Xcode 버전 10.2.1 (10E1001), Swift 5
해결책
1. UINavigationController의 사용자 지정 클래스 만들기
import UIKit
class NavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
}
extension NavigationController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController.navigationItemBackButtonTextIsHidden {
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
}
2. UIViewController 확장 추가
import UIKit
extension UIViewController {
@objc var navigationItemBackButtonTextIsHidden: Bool { return false }
}
3. ViewController 클래스 업데이트
import UIKit
class ViewController: UIViewController {
override var navigationItemBackButtonTextIsHidden: Bool { return true }
}
전체 샘플
import UIKit
// MARK: - ViewController
class ViewController: UIViewController {
var screenCounter = 1
override func viewDidLoad() {
super.viewDidLoad()
setupNavigationItem()
}
override var navigationItemBackButtonTextIsHidden: Bool { return (screenCounter % 2) == 0 }
}
extension ViewController {
private func setupNavigationItem() {
navigationItem.title = "VC \(screenCounter)"
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "push", style: .plain, target: self, action: #selector(pushBarButtonTouchedUpInside))
}
@objc func pushBarButtonTouchedUpInside(button: UIBarButtonItem) {
guard let navigationController = navigationController else { return }
let viewController = ViewController()
viewController.screenCounter = screenCounter + 1
viewController.view.backgroundColor = .white
navigationController.pushViewController(viewController, animated: true)
}
}
// MARK: - NavigationController
class NavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
}
extension NavigationController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController.navigationItemBackButtonTextIsHidden {
viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
}
// MARK: - UIViewController extension
extension UIViewController {
@objc var navigationItemBackButtonTextIsHidden: Bool { return false }
}
결과
Appdelegate의 didFinishLaunchingWithOptions 함수에서이 코드를 사용했습니다.
if #available(iOS 11, *) {
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .highlighted)
} else {
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0,
-60), for:UIBarMetrics.default)
}
이것은 나를 위해 일하고 있습니다
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
참고 URL : https://stackoverflow.com/questions/33025239/remove-text-from-back-button-keeping-the-icon
'Nice programing' 카테고리의 다른 글
만드는 방법 (0) | 2020.11.03 |
---|---|
SQL 다중 결합 문 (0) | 2020.11.03 |
PHP Composer가 왜 그렇게 느린가요? (0) | 2020.11.02 |
INTENT 인터넷 연결 확인 (0) | 2020.11.02 |
Java 컴파일 속도 대 Scala 컴파일 속도 (0) | 2020.11.02 |