programing

iOS UIBarButtonItem의 제목 텍스트 제거

lastcode 2023. 6. 16. 21:47
반응형

iOS UIBarButtonItem의 제목 텍스트 제거

가 하고 은 '로의서'의 입니다.UIBarButtonItem내비게이션 바에 파란색 쉐브론만 남겨둡니다. 7중입니다.OS 7용으로 개발 중입니다.저는 다음과 같은 방법을 시도해 보았지만 이에 국한되지는 않았습니다.

이것은 제가 좋아하지 않는 이미지 방법입니다(이미지가 어긋나 보입니다).

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

제가 시도한 또 다른 방법은 다음과 같습니다(아무것도 표시되지 않음).

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title=@"";
self.navigationItem.leftBarButtonItem=barBtn;

제가 이루고 싶었던 것은 iOS 7 뮤직 앱에서 볼 수 있는 뒤로 버튼과 같은 것인데, 이 앱은 쉐브론이 하나밖에 없습니다.

감사해요.

제목을 변경하지 않고 뷰 컨트롤러의 뒤로 단추 제목을 설정하려면 다음을 사용합니다.

목표-C:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];

스위프트:

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

이 작업은 뒤로 버튼을 누르면 볼 수 있는컨트롤러에서 수행됩니다. 즉, '< 설정'을 보는 대신 '<'을 보고 싶은 경우 SettingsViewController에서 이 작업을 수행합니다.init그러면 뷰 컨트롤러 자체를 볼 때 제목이 표시되지 않는 문제가 발생하지 않습니다.

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-60, -60)
                                                         forBarMetrics:UIBarMetricsDefault];

그런 다음 뒤로 단추 항목 제목을 제거할 수 있습니다.

스토리보드를 사용하는 경우 탐색 특성 검사기 뒤로 단추에 공백을 설정할 수 있습니다.

스토리보드를 사용하는 경우 다음으로 이동할 수 있습니다.Attributes Inspector의 보기Navigation Item)를 합니다.Navigation Bar을 합니다.Back Button속성을 " "(한 개의 공백 문자)에 입력합니다.이렇게 하면 뒤로 단추 제목이 공백 문자 하나로 설정되어 쉐브론이 표시됩니다.코드를 조작할 필요가 없습니다.

example image

설됩니다가 설정됩니다.Back Button뒤로 버튼의 제목은 이 뷰 컨트롤러 위에 눌러진 것에서 이 뷰 컨트롤러로 segue됩니다.Back Button이 컨트롤러 내부에 표시됩니다!

이 기능은 텍스트 없이 '뒤쪽' 쉐브론만 표시할 수 있습니다.

self.navigationController.navigationBar.topItem.title = @"";

을 이속 위정치에 합니다.viewDidLoad탐색 모음을 표시하는 View 컨트롤러를 표시합니다.

참고: iOS 7에서만 테스트해 보았는데, 이는 문제의 범위 내에 있습니다.

enter image description here

때때로 상황에 맞게 사물을 보는 것이 도움이 됩니다.다음은 "뒤로" 텍스트를 숨기지만 화살표를 표시하는 최소 프로젝트입니다.

스토리보드

enter image description here

Show Second View Controller(두 번째 보기 컨트롤러 표시) 버튼에서 두 번째 보기 컨트롤러로 표시됩니다.

두 번째 뷰 컨트롤러에 제목이 포함되도록 탐색 항목도 추가했습니다.이것은 선택 사항입니다.뒤로 버튼에는 영향을 주지 않습니다.

코드

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

대체 방법(IB 전용, 코드 없음)

스토리보드에서 두 번째가 아닌 첫 번째 보기 컨트롤러의 탐색 항목을 선택합니다.뒤로 단추 텍스트의 공백을 입력하십시오.

enter image description here

단추의 제목을 설정할 때는 @" 대신 @"를 사용합니다.

--편집--

다른 줄을 사용해 볼 때 달라지는 것이 있습니까?저는 다음 코드를 성공적으로 사용하고 있습니다.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString은 iOS 7 이하 버전에 따라 @" 또는 @"Back"으로 설정되는 변수입니다.

한 가지 주의할 점은 이 코드가 사용자 지정할 페이지의 컨트롤러에 없다는 것입니다.실제로는 탐색 스택에 들어가기 전에 컨트롤러에 있습니다.

self.navigationController.navigationBar.topItem.title = @"";

iOS7에서, Apple은 UI 내비게이션 바에 두 가지 새로운 속성 '백'을 도입했습니다.표시기 전환 마스크 이미지' 및 '뒤로'표시기 이미지'입니다.

한 번만 전화하면 됩니다.

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

기본 쉐브론 글리프 대신 사용자 지정 이미지를 렌더링하여 키 윈도우의 색조 색상을 이어받습니다.

그리고 제목을 삭제하는 것에 대해서는 카마로스의 답을 제시하겠습니다.새 보기 컨트롤러를 푸시하는 보기 컨트롤러에서 이 코드를 호출해야 합니다.iOS UIBarButtonItem의 제목 텍스트 제거

저는 제공된 답변으로 많은 성공을 거두지는 못했지만 정말 간단한 해결책을 찾았습니다.스토리보드에서 UIView 컨트롤러의 탐색 항목을 클릭하고 뒤로 단추 텍스트를 설정할 수 있습니다.저는 그것을 하나의 '공간으로 설정했고 그것은 제가 찾고 있던 행동을 주었습니다.enter image description here

이것은 iOS10에서 저에게 효과가 있었습니다.뷰 컨트롤러의 viewDidLoad에서 이를 호출합니다.

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

iOS7과 6에서 작업하는 이 문제에 대한 간단한 해결책은 viewDidLoad에서 사용자 정의 제목 보기를 설정하는 것입니다.

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

그러면 viewWillAppear: 안전하게 호출할 수 있습니다.

self.navigationController.navigationBar.topItem.title = @" ";

제목 보기는 사용자 정의 보기이므로 탐색 스택에서 다시 이동할 때 덮어쓰지 않습니다.

실제로 단 한 가지 요령으로 이를 수행할 수 있습니다.

재정의UINavigationBar클래스를 지정하고 다음 코드 줄을 추가합니다.

- (void)layoutSubviews{
    self.backItem.title = @"";
    [super layoutSubviews];
}

다음 그런다초화기를 합니다.UINavigationController이 사용자 지정 UI 탐색 모음 클래스를 사용합니다.기타.UINavigationController * navController = [[UINavigationController alloc] initWithNavigationBarClass:[CBCNavigationBar class] toolbarClass:nil];

이것이 도움이 되길 바랍니다.

저는 도나 리의 대답을 이용해 뭔가를 엮을 수 있었습니다.다음은 내 UIViewController 하위 클래스에 나타나는 솔루션입니다.

var backItemTitle:String?

override func viewDidLoad() {
    super.viewDidLoad()

    //store the original title
    backItemTitle = self.navigationController?.navigationBar.topItem?.title

    //remove the title for the back button
    navigationController?.navigationBar.topItem?.title = ""
}

override func willMoveToParentViewController(parent: UIViewController?) {
    super.willMoveToParentViewController(parent)
    if parent == nil {

        //restore the orignal title
        navigationController?.navigationBar.backItem?.title = backItemTitle
    }
}

원래 답변의 문제는 제목을 다시 표시할 때 컨트롤러에서 제목을 제거한다는 것입니다.ViewWillDisparen에서 제목을 재설정하려고 하면 전환 프로세스가 너무 늦습니다.그것은 타이틀이 멋지게 애니메이션을 만드는 대신에 스냅백을 발생시킵니다.그러나 willMoveToParentViewController는 더 빨리 실행되며 올바른 동작을 허용합니다.

주의: 일반 UINavigation Controller 푸시/팝으로만 테스트했습니다.다른 상황에서는 예상치 못한 동작이 추가로 발생할 수 있습니다.

첫 번째 ViewController의 prepareForSegue: 메서드에서 해당 뷰 제목을 @"로 설정하여 다음 뷰를 누르면 이전 뷰 컨트롤러 제목이 @"로 표시됩니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    self.navigationItem.title = @" ";
}

이와 관련된 유일한 문제는 뒤로 단추를 누르면 이전 보기에 제목이 없으므로 viewWillAppear에서 제목을(를) 다시 추가할 수 있다는 것입니다.

- (void)viewWillAppear:(BOOL)animated{
    self.navigationItem.title = @"First View Title";
}

저는 이 해결책을 별로 좋아하지 않지만 효과가 있고 다른 방법을 찾지 못했습니다.

스위프트 3

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

아무도 도움이 되지 않았습니다.하지만 한 가지 속임수가 있었습니다. 저는 방금 (뒤로 버튼이 어디로 가는지) 누르는 뷰 컨트롤러의 제목을 지웠습니다.

따라서 이전 보기에 제목이 없을 때 iOS 7에서 뒤로 단추에는 텍스트 없이 화살표만 표시됩니다.

viewWillAppear제가 원래 제목을 다시 붙였습니다.

하위 클래스를 사용하고 있습니다.navigationController" "." "는 "뒤로"을(를) 합니다.

앱을 통해 영구적으로 제거하기 위해 사용하고 있습니다.

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                       style:UIBarButtonItemStylePlain
                                                                                      target:nil
                                                                                      action:nil];
}

@end
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];
    
    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

저도 같은 문제를 겪고 있었고 이런 식으로 했습니다.

--편집--

이것은 모든 UIButtonItem의 제목 텍스트를 제거하려는 경우 해결책입니다.백바 버튼 항목의 제목만 삭제하고 싶다면 간단한 해결책은 없습니다.저의 경우 제목 텍스트를 표시해야 하는 UIBarButtonItem이 거의 없기 때문에 특정 버튼의 제목을 변경했습니다.텍스트 속성.보다 구체적으로 설명하려면 아래 코드를 사용하십시오. 그러면 탐색 모음 단추만 변경됩니다.

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor clearColor],UITextAttributeTextColor,
                                nil];
    
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:attributes
                                                forState:UIControlStateNormal];

--편집 -- 신속한 처리를 위한

let BarButtonItemAppearance = UIBarButtonItem.appearance()
        BarButtonItemAppearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)
        BarButtonItemAppearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .highlighted)
        BarButtonItemAppearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .selected)

뒤로 단추 숨기기 탐색 모음 제목

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

뒤로 단추 제목을 제거하는 것이 더 간단합니다.

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar?.backItem?.title = ""
}

Swift 3.1 UINavigation Controller의 위임 방법을 구현하여 이를 수행할 수 있습니다.뒤로 단추가 있는 제목만 숨깁니다. 뒤로 화살표 이미지와 기본 기능은 계속 표시됩니다.

func navigationController(_ navigationController: UINavigationController, 
  willShow viewController: UIViewController, animated: Bool) {
        let item = UIBarButtonItem(title: " ", style: .plain, target: nil, 
                    action: nil)
        viewController.navigationItem.backBarButtonItem = item
    }

다음을 사용할 수도 있습니다.

UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;

[temporaryBarButtonItem release];

이것은 나에게 효과가 있습니다.

case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

전 세계적으로 완벽한 솔루션

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    return true
}

사용자 정의 클래스를 만듭니다.UINavigationController내 앱의 모든 내비게이션 컨트롤러에 적용합니다.이 사용자 정의 내부UINavigationController클래스 I 설정UINavigationBar에 위임.self보기가 로드되면

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

그런 다음 위임 방법을 구현합니다.

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

이렇게 하면 사용자 지정 클래스를 모든 탐색 컨트롤러에 할당하기만 하면 모든 뒤로 단추에서 제목이 지워집니다.또한 명확하게 하기 위해 항상 내부의 다른 모든 뷰 컨트롤러의 제목을 설정합니다.viewWillAppear보기가 표시되기 직전에 제목이 항상 업데이트되도록 합니다(이와 같은 트릭으로 제거되는 경우).

뒤로 버튼 네비게이션 항목을 한 칸만 입력하면 됩니다!!

나처럼 사용자 정의 보기를 사용하는 경우UINavigationBar그리고 당신은 뒤로 버튼을 눌러야 하고, 그 다음에는 약간 뭉클한 느낌이 드는 작업을 해야 합니다.

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

만약 그것이 제시되지 않는다면, 그것이 어떤 제목을 보여주려 해도, 이것은 그것이 그려지고 문제를 해결하기 전에 그것이 보여지고 숨겨진다는 것을 의미합니다.

extension UIViewController{
    func hideBackButton(){
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

이것이 더 나은 해결책입니다.

다른 해결책은 해킹이기 때문에 위험합니다.

extension UINavigationController {

    func pushViewControllerWithoutBackButtonTitle(_ viewController: UIViewController, animated: Bool = true) {
        viewControllers.last?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        pushViewController(viewController, animated: animated)
    }
}

언급URL : https://stackoverflow.com/questions/19078995/removing-the-title-text-of-an-ios-uibarbuttonitem

반응형