专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
设置右边导航栏
设置导航栏右边按钮
在
CZPictureWallViewController
里面定义setupRightNav
/// 设置右边导航栏 - (void)setupRightNav { UIButton *mapButton = [UIButton buttonWithType:UIButtonTypeCustom]; [mapButton setImage:[UIImage imageNamed:@"icon_map"] forState:UIControlStateNormal]; [mapButton setImage:[UIImage imageNamed:@"icon_map_highlighted"] forState:UIControlStateHighlighted]; [mapButton sizeToFit]; [mapButton setBackgroundColor:[UIColor redColor]]; UIBarButtonItem *mapItem = [[UIBarButtonItem alloc] initWithCustomView:mapButton]; UIButton *searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; [searchButton setImage:[UIImage imageNamed:@"icon_search"] forState:UIControlStateNormal]; [searchButton setImage:[UIImage imageNamed:@"icon_search_highlighted"] forState:UIControlStateHighlighted]; [searchButton sizeToFit]; [searchButton setBackgroundColor:[UIColor redColor]]; UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithCustomView:searchButton]; self.navigationItem.rightBarButtonItems = @[mapItem, searchItem]; }
抽取代码,发现
mapItem
和searchItem
的创建代码非常类似,将代码抽取到UIBarButtonItem
的分类里面@implementation UIBarButtonItem (Extension) /** * 快速创建UIBarButtonItem * @param imageName 普通图片名称 * @return 带按钮的UIBarButtonItem */ + (instancetype)itemWithImageName:(NSString *)imageName { NSString *highlightedImageName = [NSString stringWithFormat:@"%@_highlighted", imageName]; UIButton *mapButton = [UIButton buttonWithType:UIButtonTypeCustom]; [mapButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; [mapButton setImage:[UIImage imageNamed:highlightedImageName] forState:UIControlStateHighlighted]; [mapButton sizeToFit]; [mapButton setBackgroundColor:[UIColor redColor]]; return [[UIBarButtonItem alloc] initWithCustomView:mapButton]; } @end
调用抽取好的分类
/// 设置右边导航栏 - (void)setupRightNav { UIBarButtonItem *mapItem = [UIBarButtonItem itemWithImageName:@"icon_map"]; UIBarButtonItem *searchItem = [UIBarButtonItem itemWithImageName:@"icon_search"]; self.navigationItem.rightBarButtonItems = @[mapItem, searchItem]; }
设置2个BarButtonItem间距
/// 设置右边导航栏 - (void)setupRightNav { // 要设置2个barButtonItem的间距不要使用弹簧去弹开,会弹的很远 // UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *mapItem = [UIBarButtonItem itemWithImageName:@"icon_map"]; UIBarButtonItem *searchItem = [UIBarButtonItem itemWithImageName:@"icon_search"]; self.navigationItem.rightBarButtonItems = @[mapItem, searchItem]; mapItem.customView.width = 60; searchItem.customView.width = 60; }