2015-03-17 1 views
7

Я разрабатывал приложение для iOS и имел проблемы с использованием изображения в качестве элемента левой кнопки на панели навигации. Я попытался сделать это следующими способами:leftbarbuttonitem не отображается в навигационной панели

UIImage *backButtonImage = [UIImage imageNamed:@"backbuttonCB"]; 
CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 
UIButton *backButton = [[UIButton alloc] initWithFrame:buttonFrame]; 
[backButton setImage:backButtonImage forState:UIControlStateNormal]; 
UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton]; 
self.navigationItem.leftBarButtonItem = backBarButtonItem; 

Кнопка панели никогда не отображается во время работы приложения.

Затем я попытался использовать этот метод следующим образом.

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backbuttonCB"] style:UIBarButtonItemStylePlain target:nil action:@selector(methodname)]; 

Этот метод действительно сработал. Однако отображаемое изображение было окрашено в синий цвет и выглядело не таким, каким оно предназначалось. Изменение цвета оттенка этого изображения не помогло.

Любая идея, как я могу решить эту проблему?

EDIT: дополнительная информация, если это помогает. Это первый вид в стеке навигации. Навигационный стек отображается модально, т. Е. Имеется предыдущий контроллер представления, и между предыдущим контроллером представления и навигационным контроллером существует модальный отступ. Это первый вид в стеке навигации.

РЕДАКТИРОВАТЬ: ПРОБЛЕМА ИСПРАВЛЕНО. Я думаю, что это была ошибка в xcode, потому что когда я перезапустил xcode и протестировал его с помощью фактического устройства вместо эмулятора, он работал нормально. Тем не менее, по-прежнему не работает на эмулятор.

+0

Вы пытались установить фоновое изображение кнопки? – Wain

+0

Вы должны инициализировать UIButton как 'UIButton * button = [UIButton buttonWithType: UIButtonTypeCustom];' Then 'setFrame' и' setImage' –

+0

Оба метода не работают. – sosale151

ответ

0

Замените код для инициализации кнопки как customType, как это:

UIImage *backButtonImage = [UIImage imageNamed:@"backButtonCB"]; 
    CGRect buttonFrame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); 
    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [backButton setFrame:buttonFrame]; 
    [backButton setImage:backButtonImage forState:UIControlStateNormal]; 
    UIBarButtonItem *backBarButtonItem= [[UIBarButtonItem alloc] initWithCustomView: backButton]; 
    self.navigationItem.leftBarButtonItem = backBarButtonItem; 

Надеется, что это помогает .... :)

+0

Пробовал. Не работал. – sosale151

+0

, то сначала проверьте, что ваш 'backButtonImage' существует или нет? –

+0

да .... проверьте, что вы вводите имя правильного изображения, coz его работающий на моем конце –

5

Попробуйте использовать этот код,

self.navigationItem.hidesBackButton=YES; 

UIImage *buttonImage = [UIImage imageNamed:@"Back"]; 
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[aButton setImage:buttonImage forState:UIControlStateNormal]; 
aButton.frame = CGRectMake(0.0,0.0,buttonImage.size.width,buttonImage.size.height); 
[aButton addTarget:self action:@selector(backBtnTapped) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:aButton]; 
self.navigationItem.leftBarButtonItem = backButton; 
+0

что нового? –

+0

Идеальный ответ! – Vignesh

+0

Не работает для меня. Я предполагаю, что это имеет какое-то отношение к навигационному контроллеру, представленному модально. Я добавил еще к вопросу – sosale151

3

У меня такая же проблема. Для того, чтобы увидеть кнопку, я должен был изменить оттенок цвета, вот код в Swift:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(image:UIImage.init(named: "btn_back_default")!, style:UIBarButtonItemStyle.Plain, target: self, action: Selector("back")) 
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor() 
12

Попробуйте установить ваш leftBarButtonItem этот путь. При представлении модально это не появляется.

self.navigationController?.navigationBar.topItem.leftBarButtonItem =

+1

Ты мужчина, спасибо. –

1

myButton.sizeToFit() Вызов перед назначением на leftBarButtonItem помог мне.

let cancelButton = UIButton() 
    cancelButton.backgroundColor = .red 
    cancelButton.setTitle("Common/Cancel".localized, for: .normal) 
    cancelButton.sizeToFit() //!!! 
    let cancelBarButton = UIBarButtonItem(customView: cancelButton) 
    navigationItem.leftBarButtonItem = cancelBarButton 
+0

My leftBarButtonItem не показывался на iOS10 и ранее. Ваше решение работало, потому что я установил UIEdgeInset на отрицательное число (для iOS11), которое не понравилось iOS10. Благодарю. – yoshitech