首页 > 代码库 > 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;