Как программно установить картинку в NavBar?

У меня есть подробный вид с панелью навигации с кнопкой «Назад» и именем представления. Панель навигации устанавливается программно. Представленное имя устанавливается следующим образом.

self.title = NSLocalizedString(name, @"");

Название зависит от представленного вида.

Теперь я хотел бы также представить небольшую иконку на панели навигации, которая также зависит от вида.

Как я могу это сделать?


person Lars -    schedule 21.11.2012    source источник
comment
Решил это. Код, помещенный под viewDidLoad UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithImage:icon style:UIBarButtonItemStyleBordered target:self action:@selector(action:)]; self.navigationItem.rightBarButtonItem = addButton; [отпускание кнопки];   -  person Lars -    schedule 21.11.2012
comment
Да! Я нашел другой способ сделать это. Извините, ни один из ответов не сработал для меня. Теперь у меня есть кнопка rightBar с изображениями в зависимости от вида.   -  person Lars -    schedule 22.11.2012
comment
О человек, раньше я не понимал, что вам нужна кнопка панели навигации ... извините за это и извините за позднее добавление решения в соответствии с вашим запросом .. :)   -  person Rajneesh071    schedule 22.11.2012
comment
Это не обязательно должна быть кнопка, просто картинка в правом конце панели, но кнопка помогла мне.   -  person Lars -    schedule 23.11.2012
comment
да .. в панели навигации вы можете установить кнопку и отобразить на ней изображение .. :)   -  person Rajneesh071    schedule 23.11.2012
comment
Но вы также можете установить изображение ... нет необходимости устанавливать кнопку ... просто проверьте мой ответ еще раз ... :)   -  person Rajneesh071    schedule 23.11.2012


Ответы (3)


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

Вставьте didFinishLaunchingWithOptions

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"title_bar.png"] forBarMetrics:UIBarMetricsDefault];  

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

UINavigationBar *navBar = [[self navigationController] navigationBar];
    UIImage *image = [UIImage imageNamed:@"TopBar.png"];
    [navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

Или вы можете настроить представление на панели навигации Ссылка

[[UINavigationBar appearance] addSubview:yourView]; 

or

self.navigationItem.titleView = YourView;  

И задайте заголовок с помощью h

self.navigationItem.title = @"Your Title"; 

И вы можете получить navigationBarButton, используя это

-(void)getRightBarBtn
{
    UIButton *Btn =[UIButton buttonWithType:UIButtonTypeCustom];

    [Btn setFrame:CGRectMake(0.0f,0.0f,68.0f,30.0f)];
    [Btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"yourImage.png"]]  forState:UIControlStateNormal];
    //[Btn setTitle:@"OK" forState:UIControlStateNormal];
    //Btn.titleLabel.font = [UIFont fontWithName:@"Georgia" size:14];
    [Btn addTarget:self action:@selector(yourBtnPress:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithCustomView:Btn];
    [self.navigationItem setRightBarButtonItem:addButton];
}

И установить простой imageView на панели навигации

UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"star.png"]];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:image];
self.navigationItem.rightBarButtonItem = backBarButton;
person Rajneesh071    schedule 21.11.2012
comment
self.title или self.navigationItem.title дают тот же результат и строки для изображения не работают. В баре нет изображения - person Lars -; 21.11.2012
comment
да. Он изменил панель навигации, чтобы отображать значки в ряд вдоль панели, но это работало только при использовании iPhone, а не при использовании iPad. Но, к сожалению, это не подходит для случая, с которым я работаю, но в любом случае приятно знать - person Lars -; 21.11.2012

Вам нужно создать подкласс UINavigationBar. Затем в drawRect сделайте что-то вроде:

[[UIImage imageNamed...] drawInRect:...]

и вызовите суперметод, конечно

person Dimitar Marinov    schedule 21.11.2012

Добавьте этот код в viewDidLoad вашего ViewController:

UIImage *image = [UIImage imageNamed: @"myIcon.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(5, 2, 100, 39);
[self.navigationController.navigationBar addSubview:imageView];

imageView также может быть объявлен как переменная экземпляра, поэтому вы можете получить к нему доступ после его добавления (например, если вы хотите удалить свой значок из панели навигации в какой-то момент).

person Oleg    schedule 21.11.2012
comment
Если я добавляю imageView в качестве свойства, он все равно говорит, что несовместимый тип указателя, назначенный UIImage из UIImageView, и относительно фрейма, который не найден в объекте типа UIImage. - person Lars -; 21.11.2012
comment
Да! Я нашел другой способ сделать это. Извините, ни один из ответов не сработал для меня. Теперь у меня есть кнопка rightBar с изображениями в зависимости от вида. - person Lars -; 22.11.2012