首页 > 代码库 > 02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

一、按钮的设置

1.设置背景图片

[btn setBackgroundImage:image forState:UIControlStateNormal];

2.内部UIImageView

1> 设置内部UIImageView的图片

[btn setImage:image forState:UIControlStateNormal];// 不能写成btn.imageView.image = image;

2> 调整内部图片的内容模式

self.imageView.contentMode = UIViewContentModeCenter;

3> 调整内部ImageView的frame 

重写 - (CGRect)imageRectForContentRect:(CGRect)contentRect方法

#pragma mark - 内容区域里显示的图片区域位置- (CGRect)imageRectForContentRect:(CGRect)contentRect{    CGFloat x = 10;    CGFloat y = 0;    CGFloat width = contentRect.size.width - 2 * x;    CGFloat height = contentRect.size.height;    return CGRectMake(x, y, width, height);}

3.内部UILabel

1> 设置内部UILabel的文字

[btn setTitle:@"主页" forState:UIControlStateNormal];// 不能写成btn.titleLabel.text = @"主页";

2> 文字居中

self.titleLabel.textAlignment = NSTextAlignmentCenter;

3> 文字大小

self.titleLabel.font = [UIFont systemFontOfSize:12];

4> 调整内部UILabel的frame

重写 - (CGRect)titleRectForContentRect:(CGRect)contentRect方法

#pragma mark - 内容区域里显示的title区域位置- (CGRect)titleRectForContentRect:(CGRect)contentRect{    CGFloat x = 10;    CGFloat y = 0;    CGFloat width = contentRect.size.width - 2 * x;    CGFloat height = contentRect.size.height;    return CGRectMake(x, y, width, height);}

4.覆盖父类在highlighted时的所有操作

- (void)setHighlighted:(BOOL)highlighted { };

 


二、让一个控制器拥有导航栏的最快方法:包装一层导航控制器 

 

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];  // controller 为UIViewController 的一个实例

 


三、添加子控制器

- (void)addChildViewController:

[self addChildViewController:nav];

会将子控制器添加到childViewControllers,并且子控制器是有顺序的

* 目的就是持有子控制器,不让子控制器销毁,保证主控制器在,子控制器就在

 


 

四、UIBarButtonItem导航按钮

1> 创建一个带有文字的item

[[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStyleBordered target:nil action:nil];

2> 创建一个包装了自定义View的item

- (id)initWithCustomView:(UIView *)customView

 

3> 设置导航按钮UIBarButtonItem主题

 

// 1.修改所有UIBarButtonItem的外观UIBarButtonItem *barItem = [UIBarButtonItem appearance];// 2.修改item的背景图片[barItem setBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];[barItem setBackgroundImage:image2 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];// 3.修改item上面的文字样式NSDictionary *dict = @{    UITextAttributeTextColor : [UIColor darkGrayColor],    UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]};[barItem setTitleTextAttributes:dict forState:UIControlStateNormal];[barItem setTitleTextAttributes:dict forState:UIControlStateHighlighted];

 

 

 


 

五、设置导航栏UINavigationBar主题

// 1.appearance方法返回一个导航栏的外观对象 修改了这个外观对象,相当于修改了整个项目中的外观UINavigationBar *bar = [UINavigationBar appearance];// 2.设置导航栏的背景图片[bar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];// 3.设置导航栏文字的主题[bar setTitleTextAttributes:@{  UITextAttributeTextColor : [UIColor blackColor],  UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero] }];

 


六、设置状态栏样式

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;