在我的rootTableViewCobtroller
中,我想制作一个通用的方法。当我选择单元格时,rootTableViewCobtroller
推送我所有其他ViewControllers中的一个(命名为某些规则)
当我选择单元格时,请执行推送操作:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath{
NSString *string = [NSString stringWithFormat:@"List%ld",indexPath.row+1];
Class vcClass = NSClassFromString(string);
UIViewController *vc = [[vcClass alloc]init];
vc.view.backgroundColor = [UIColor whiteColor];
[self.navigationController pushViewController:vc animated:YES];
}
所以我的其他ViewControllers的类名是List1,list2,List3...
在上面的代码中,我只是使用代码初始viewcontroller。出于某种原因,对于一些viewcontroller,我使用与之关联的storyboard文件。故事板文件,彼此对应命名它的故事板id是相同的作为班级名称
e.g:
List1没有故事板文件,我应该通过
创建List1实例 List1 *list1VC = [[List1 alloc]init];
List2没有故事板文件,我应该通过
创建List2实例List2 *list2VC = [[List2 alloc]init];
List3有一个故事板文件,将它命名为storyboard文件的故事板标识List3
。我应该通过
List3 *list3VC = [self.storyboard instantiateViewControllerWithIdentifier:@"List3"];
所以我应该像这样修改我的通用方法:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath{
NSString *string = [NSString stringWithFormat:@"List%ld",indexPath.row+1];
Class vcClass = NSClassFromString(string);
UIViewController *vc;
//**if storyboard contain a file with storyboard id is equal to "string"**
if ([self.storyboard contain_storyboard_id: string]){
vc = [self.storyboard instantiateViewControllerWithIdentifier:string];
}else{
vc = [[vcClass alloc]init];
vc.view.backgroundColor = [UIColor whiteColor];
[self.navigationController pushViewController:vc animated:YES];
}
但是如何检查故事板ID是否存在,如果我不检查类是否有关联的故事板文件只是使用
崩溃我的应用时[self.storyboard instantiateViewControllerWithIdentifier:string]
。