Изменение фона элемента навигации и добавление изображения

У меня есть контроллер Root View, мне нужно знать об изменении его синего фона на изображение или изменении его цвета, а также я хочу добавить изображение с правой стороны. Например, на изображении ниже мне нужно изменить фон текста Root View Controller на другое изображение или изменить его цвет и добавить небольшой значок справа от текста Root View Controller. Как мне это сделать? Я прошел через Изменить фоновое изображение панели навигации для каждой навигации но все еще возникают проблемы с его реализацией.

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

Viewcontroller.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

Это моя раскадровка


person Francis F    schedule 27.08.2013    source источник
comment
Вы пробовали это? [[Внешний вид UINavigationBar]setBackgroundImage: @navImage forBarMetrics:UIBarMetricsDefault];   -  person karthika    schedule 27.08.2013
comment
предположим, вы работаете на iOS 5+?   -  person Master Stroke    schedule 27.08.2013
comment
Я использую xcode 4.2, нужно скоро обновить: P   -  person Francis F    schedule 27.08.2013


Ответы (2)


Попробуйте поместить любой из этих кодов в ViewWillAppear/ViewDidAppear/didFinishLaunchingWithOptions (в случае appDelegate).

1)navigationItem.titleView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"urtitlebar.png"]];

OR

2)

UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage     imageNamed:@"urtitlebar.png"]];
[image setFrame:CGRectMake(0, 0, 44, 44)];
[myView addSubview:image];
[self.navigationController.navigationBar addSubview:myView];

OR

3)

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

EDIT: (если вы используете старую версию SDK, укажите 3.2.5)

Создайте подвид UINavigationBar и переопределите метод с именем -drawRect:(CGRect)rect с помощью

@implementation UINavigationBar (BackgroundImage)

- (void)drawRect:(CGRect)rect 
{
    UIImage *navBarImage;


        image = [UIImage imageNamed: @"urNavigationBar.png"];
    }
    [navBarImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@конец

person Master Stroke    schedule 27.08.2013
comment
Спасибо за ваш ответ, я почти близок к решению с помощью вашего кода, но у меня есть небольшая проблема, во втором ответе можно ли загрузить setFrame с правой стороны? И в вашем третьем ответе я получаю этот тип получателя ошибки UINavigationBar, например, сообщение не объявляет метод setBackgroundImage - person Francis F; 27.08.2013
comment
[изображение setFrame: CGRectMake (276, 0, 44, 44)]; - person Master Stroke; 27.08.2013
comment
да, я уже это тоже настроил [image setFrame:CGRectMake(275, 0, 44, 44)], jst хотел знать, можно ли загрузить его с правой стороны, все в порядке. Любая идея об ошибке, мне нужно импортировать какой-либо другой класс? - person Francis F; 27.08.2013
comment
да, я получаю этот тип получателя ошибки UINavigationBar, например, сообщение не объявляет метод setBackgroundImage - person Francis F; 27.08.2013
comment
используйте [navBar setBackgroundImage: изображение дляBarMetrics: UIBarMetricsDefault]; вместо этого .. (для ARC) - person Master Stroke; 27.08.2013
comment
sebastiancelis.com/2009/12/21/ = =› выглядит потрясающе... только что нашел это... удачи... - person Master Stroke; 27.08.2013

Попробуйте этот код в didFinishLaunchingWithOptions AppDelegate.m для пользовательского изображения на панели навигации.

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"yourImageName.png"] forBarMetrics:UIBarMetricsDefault];

Вы также можете добавить пользовательскую кнопку в качестве кнопки панели.

 // create a custom button in viewDidLoad of your ViewController in which you want to place a custom bar button
 UIButton *customBackBtn =[[UIButton alloc] init];
[customBackBtn setBackgroundImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal];
customBackBtn.frame = CGRectMake(100, 100, 52, 31);

// set this customized button as BarButton
UIBarButtonItem *backBtn =[[UIBarButtonItem alloc] initWithCustomView:customBackBtn];
[customBackBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = backBtn;

Это оно.

person Mayank Jain    schedule 27.08.2013
comment
спасибо за ваш ответ, в вашем первом утверждении можно расположить изображение, например, теперь изображение отображается сверху до 75%, но мне нужно отображать только центральную часть. И во второй части я знаю, что нужно добавить пользовательскую кнопку, я пытаюсь добавить UIimage справа вместо кнопки панели, возможно ли это? - person Francis F; 27.08.2013