OC中每個對象都有一個對應(yīng)的class屬性,而我們之所以能創(chuàng)建不同的對象,就是因為他們的class不同.class不一定用來創(chuàng)建對象,但對象一定離不開class。
Runtime中有這樣一個函數(shù)NSClassFromString(NSString *aClassName)可以根據(jù)傳入的類名返回一個對應(yīng)的class,而拿到class之后,我們可以則直接通過[class new]或者[[class alloc] init]來創(chuàng)建相應(yīng)的對象.通過這個屬性,我們可以把他封裝到tabbar的創(chuàng)建中,創(chuàng)建時只需要傳入類名即可。
-(void)creatBarButtonClassAry:(NSArray<NSString*>*)classAry titleAry:(NSArray<NSString*>*)titleAry imageAry:(NSArray<UIImage*>*)imageAry selectedImageAry:(NSArray<UIImage*>*)selectorImageAry{
NSMutableArray*vcArr=[NSMutableArray array];
for (int i = 0; i<titleAry.count; i++) {
Class vcClass=NSClassFromString(classAry[i]);
UITabBarItem*item=[[UITabBarItem alloc]initWithTitle:titleAry[i]?:nil image:imageAry[i]?:nil selectedImage:selectorImageAry[i]?:nil];
UIViewController*vc=[vcClass new];
[vc setTabBarItem:item];
[vcArr addObject:vc];
}
self.viewControllers=vcArr;
}
調(diào)用的時候直接傳入類名就可以了
- (void)viewDidLoad {
[super viewDidLoad];
[self creatBarButtonClassAry:@[@"ListViewController",@"UserViewController",@"FriendViewController",@"SetViewController"] titleAry:@[@"聊天",@"用戶",@"朋友",@"設(shè)置"] imageAry:nil selectedImageAry:nil];
}