详解iOS项目基本框架搭建

2020-01-21 04:45:42王旭

添加itemBar对应的ViewController的方法有两种:一是使用UITabBarController的 setViewControllers: 方法设置;二是用UIViewController的 addChildViewController: 方法添加子视图,也可以实现添加到tabBar的功能,但是这种方法对于barItem个数 > 5的时候,只会显示前五个,剩下的不会出现时出来,也没有【more】按钮可以选择。

示例代码如下,自定义一个TabBarController继承自UITabBarController,然后重写其 viewDidLoad 方法添加子视图和标签: 


@implementation XMGTabBarController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  //添加4个item bar
  UITableViewController *vc0 = [[UITableViewController alloc] init];
  vc0.view.backgroundColor = [UIColor redColor];
  vc0.tabBarItem.title = @"精华";
  vc0.tabBarItem.image = [UIImage imageNamed:@"tabBar_essence_icon"];
  vc0.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_essence_click_icon"];
  [self addChildViewController:vc0];
  
  UIViewController *vc1 = [[UIViewController alloc] init];
  vc1.view.backgroundColor = [UIColor blueColor];
  vc1.tabBarItem.title = @"新帖";
  vc1.tabBarItem.image = [UIImage imageNamed:@"tabBar_new_icon"];
  vc1.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_new_click_icon"];
  [self addChildViewController:vc1];
  
  UITableViewController *vc2 = [[UITableViewController alloc] init];
  vc2.view.backgroundColor = [UIColor greenColor];
  vc2.tabBarItem.title = @"关注";
  vc2.tabBarItem.image = [UIImage imageNamed:@"tabBar_friendTrends_icon"];
  vc2.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_friendTrends_click_icon"];
  [self addChildViewController:vc2];
  
  UIViewController *vc3 = [[UIViewController alloc] init];
  vc3.view.backgroundColor = [UIColor grayColor];
  vc3.tabBarItem.title = @"我";
  vc3.tabBarItem.image = [UIImage imageNamed:@"tabBar_me_icon"];
  vc3.tabBarItem.selectedImage = [UIImage imageNamed:@"tabBar_me_click_icon"];
  [self addChildViewController:vc3];

   //下面的方法也是可以的,推荐使用下面的方法
//  [self addChildViewController:@[vc0,vc1,vc2,vc3]];
  
}

二 开发过程中注意代码重构

 在开发过程中,我们最好不要重复写相同的代码,因此,在开发过程中,我们需要对我们的代码进行重构和简化,主要原则是尽量保持一个方法实现一个功能,然后尽量不写重复的代码,精简逻辑。在我们前面添tabBar item的代码中就存在大量重复性的代码,所以我们需要对其进行重构,将重复性的代码进行抽取,将不同的内容设置成参数进行自定义设置,重构后的逻辑如下:


@implementation XMGTabBarController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  /**** 添加子控制器 ****/
  [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"精华" image:@"tabBar_essence_icon" selectedImage:@"tabBar_essence_click_icon"];
  [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"新帖" image:@"tabBar_new_icon" selectedImage:@"tabBar_new_click_icon"];
  [self setupOneChildViewController:[[UIViewController alloc] init] title:@"关注" image:@"tabBar_friendTrends_icon" selectedImage:@"tabBar_friendTrends_click_icon"];
  [self setupOneChildViewController:[[UITableViewController alloc] init] title:@"我" image:@"tabBar_me_icon" selectedImage:@"tabBar_me_click_icon"];
}

/**
 * 初始化一个子控制器
 *
 * @param vc      子控制器
 * @param title     标题
 * @param image     图标
 * @param selectedImage 选中的图标
 */
- (void)setupOneChildViewController:(UIViewController *)vc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{
  vc.view.backgroundColor = [UIColor redColor];
  vc.tabBarItem.title = title;
  vc.tabBarItem.image = [UIImage imageNamed:image];
  vc.tabBarItem.selectedImage = [UIImage imageNamed:selectedImage];
  [self addChildViewController:vc];
}

@end