0

嘿开发者!我构建了一个表视图,用数组对象填充它,当用户单击表视图中的一个对象时,我实现了一个代码,它加载了该对象自己的 nib 文件,并且我正在使用 if 语句。(请注意,我用 40 个对象填充了我的表视图,因为这是我拥有和需要的东西),所以我将只显示我在 if 语句代码开头创建的前两个 if 语句,因为我有办法我的表视图中所有 40 个对象的 if 语句太多:

if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Title"]) {
    Title *titleLoad = [[Title alloc] initWithNibName:@"Title" bundle:nil];
    [self.navigationController pushViewController:titleLoad animated:YES];
    [titleLoad release];
    }
    else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Meta Description Tag"]) {
        MetaDescriptionTag *metaDescriptionTagLoad = [[MetaDescriptionTag alloc] initWithNibName:@"MetaDescriptionTag" bundle:nil];
        [self.navigationController pushViewController:metaDescriptionTagLoad animated:YES];
        [metaDescriptionTagLoad release];
    }
...

就是这样,我不想自大地展示我所有的 if 语句,所以是的,这段代码有效,每个数组对象加载它自己的单独 nib 文件(每个数组对象 40 个 nib 文件 1)和每个这些 nib 文件类似于 Web 视图、图像视图、文本字段和其他对象。说我疯了,但这是我现在唯一能想到的代码,所以希望有人能帮我把这段代码编辑成更简单的代码,谢谢

4

1 回答 1

2

如果您的值glossaryArray可以机械地转换为相应的类/笔尖名称(例如,通过删除所有空格),您可以执行以下操作:

NSString *className = [self classNameFromString:[glossaryArray objectAtIndex:indexPath.row]];
UIViewController *viewController = [[NSClassFromString(className) alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];

如果它们不能被机械地转换,你总是可以构建一个从一个到另一个的 NSDictionary 映射,或者特殊情况下的少数不同。或者重命名类和笔尖。

于 2011-04-12T16:36:42.857 回答