Пользовательская кнопка UINavigationBar не отображается - PullRequest
1 голос
/ 23 декабря 2010

(отредактировано: добавлено больше информации внизу)

Сначала я просмотрел похожие посты и попробовал их ответы, но безуспешно :( У меня есть пользовательская панель навигации (просто пользовательское фоновое изображение), и япытаюсь добавить пользовательскую кнопку возврата.

// custom back button.
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *backImg = [UIImage imageNamed:@"btn_back.png"];
backBtn.titleLabel.text = @"";
[backBtn setBackgroundImage:backImg forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(backPressed) forControlEvents:UIControlEventTouchUpInside];
backBtn.frame = CGRectMake(0, 0, 54, 33);

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem.title = @"";

Приведенный выше код предназначен для добавления кнопки, но она не отображается на панели навигации. Я все еще могу щелкнуть область, в которой она должна отображаться, иэто возвращает меня к предыдущему виду ?! При удалении вышеуказанного кода отображается стандартная кнопка возврата.

Любые идеи? Заранее спасибо!

(edit)

Приветеще раз, ребята,

Я испробовал все ваши предложения, но все еще не повезло :( Возможно, я уже упоминал ранее, что у меня есть собственное изображение навигационной панели с использованием следующего кода. Это может повлиять на отображение моей пользовательской кнопки возвратаimage.

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

// custom navigation bar image
@implementation UINavigationController (CustomImage)

// set the background image for the nav bar.
- (void) setCustomNavBar:(NSInteger)screen {

UIImage *navBarImg;
switch (screen) {
    case kCreateHuntScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_create-hunt.png"];
        break;

    case kCreateLocationsScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_create-location.png"];
        break;

    case kListNewLocationsScreenIdentifier:
        navBarImg = [UIImage imageNamed:@"title_choose-location.png"];
        break;

    default:
        break;
}

UIImageView *imgView = [[UIImageView alloc] initWithImage:navBarImg];
[[[self.navigationBar subviews] objectAtIndex:0] removeFromSuperview];
[self.navigationBar addSubview:imgView];
[imgView release];
}

@end

Ответы [ 3 ]

2 голосов
/ 30 декабря 2010

Еще раз спасибо за все ваши советы!Наконец-то я нашел решение: D

Очень быстро мне нужно было иметь возможность менять фоновое изображение для панели навигации из вида в вид, когда я толкаю или выталкиваю стек.

Использование самых популярных методов, таких как переопределение drawRect в UINavigationBar, будет работать только частично, он будет работать в корневом представлении, но затем перемещать изображение в начало стека навигационной панели для любого другого экрана, независимо от того, если яотправил его обратно и т. д.

Я нашел решение здесь: http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

Возьмите прочтение, оно прекрасно работает:)

1 голос
/ 23 декабря 2010
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:[UIImage imageNamed:@"imgname.png"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(method_name:) forControlEvents:UIControlEventTouchUpInside];
btn.frame=CGRectMake(3, 2, 53, 30);
UIBarButtonItem *btnBack=[[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem=btnBack;
[btnBack release];
[btn release];
0 голосов
/ 23 декабря 2010

Попробуйте,

self.navigationItem.hidesBackButton = YES;

перед написанием кода для .leftBarButtonItem. Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...