2014-11-19 4 views
1

Как избавиться от названия «Назад» для панели навигации Кнопка «Назад»?Как избавиться от заголовка «Назад» для кнопки «Назад назад»?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Nav Back Button 

    UIImage *backButtonIcon = [UIImage imageNamed:@"back_black"]; 

    [UINavigationBar appearance].backIndicatorImage = backButtonIcon; 
    [UINavigationBar appearance].backIndicatorTransitionMaskImage = backButtonIcon; 

    return YES; 
} 

изображение here

ответ

0
UIView *backBtnView = [[UIView alloc] initWithFrame:CGRectMake(0,0,14,36)]; 
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[backBtn setFrame:CGRectMake(0,0,14,36)]; 
[backBtn setImage:[UIImage imageNamed:@"yourImageName"] forState:UIControlStateNormal]; 
[backBtn setEnabled:YES]; 
[backBtnView addSubview:backBtn]; 
UIBarButtonItem* barbackBtn = [[UIBarButtonItem alloc] initWithCustomView:backBtnView]; 
self.navigationItem.leftBarButtonItem = barbackBtn; 
[backBtn addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside]; 
backBtn.adjustsImageWhenHighlighted = NO; 
+0

Пожалуйста, найдите время и объясните, что вы здесь делаете. Это может помочь не только OP, но и всем, кто ищет решение. – mwfire

+0

Большое спасибо :) Этот подход работает повсюду, в том числе и на iPhone 6 Plus – whiteRussian

+0

mwfire, я просто создаю представление в виде рамки для моей кнопки, чем я создаю пользовательский бит, потому что только пользовательская кнопка может включать изображение, чем я вставляю свое изображение, вы можете использовать свое имя изображения, например img.png (из поддерживаемой папки в вашем проекте), так как вы можете видеть, что первые 6 строк создают вашу настраиваемую кнопку, следующие строки привязывают вашу кнопку к navigationController. Функция initWithCustomView является основной функцией в этом процессе. [backBtn addTarget: self.navigationController action: .... это для возврата в предыдущий экран, вы можете отклонить эту функцию –

0

Вы можете установить название свойства предыдущей ViewController в пустую строку, он будет делать трюк.

+1

этот код 'self.navigationItem.backBarButtonItem = [[UIBarButtonItem Alloc] initWithTitle: @ "" стиль: UIBarButtonItemStylePlain цель: ноль действий: ноль];' добавлен в _previous_ ViewController и ... этот способ работы отлично, кроме iPhone 6 Plus. iPhone 6 Plus имеет ту же проблему%/ – whiteRussian

+0

Пробовал ли вы в своем предыдущем контроллере представления self.title = ""; in viewdidload для примера? –

+1

Спасибо за ответ, Борис) Да, я сделал. К сожалению, «трюк» не работает для iPhone 6 Plus (на устройстве, а не в симуляторе) – whiteRussian

0

попробовать это

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

Вам нужно установить кнопку возврата предыдущего контроллера представления в пустую строку, как это.

UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; 
[self.navigationItem setBackBarButtonItem:backButtonItem]; 

Но если это приложение-широкий хотел поведение, то ваш может либо сделать это в базовом UIViewController подкласса или сделать это swizzling :)

UIViewController + EmptyBackButton.h

@interface UIViewController (EmptyBackButton) 

@end 

UIViewController + EmptyBackButton.m

#import "UIViewController+EmptyBackButton.h" 
#import <objc/runtime.h> 

@implementation UIViewController (EmptyBackButton) 

+ (void)load { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     Class class = [self class]; 

     SEL originalSelector = @selector(viewDidLoad); 
     SEL swizzledSelector = @selector(mob_viewDidLoad); 

     Method originalMethod = class_getInstanceMethod(class, originalSelector); 
     Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); 

     BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); 

     if (didAddMethod) { 
      class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); 
     } else { 
      method_exchangeImplementations(originalMethod, swizzledMethod); 
     } 
    }); 
} 

#pragma mark - Method Swizzling 

- (void)mob_viewDidLoad { 
    [self mob_viewDidLoad]; 
    UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; 
    [self.navigationItem setBackBarButtonItem:backButtonItem]; 
} 

@end 

Это добавит пустую кнопку возврата ко всем подклассам UIViewController в viewDidLoad.

Также вы можете взглянуть на сообщение в блоге, которое я написал некоторое время назад около Empty Back Buttons.

Смежные вопросы