2009-10-24 64 views
0

当设置一个UITableView的数据来源,我很想得到意见,这是更好,解决答:为UITableViewCell选择字符串 - 数组还是switch语句?

NSString *labelText; 

switch (indexPath.row) { 
    case 0: 
     labelText = @"Setup New Match"; 
     break; 
    case 1: 
     labelText = @"Teams"; 
     break; 
    case 2: 
     labelText = @"Players"; 
     break; 
    case 3: 
     labelText = @"Archive"; 
     break; 
} 

cell.textLabel.text = labelText; 

或溶液B?

NSArray *labels = [NSArray arrayWithObjects:@"String 1", @"String 2", @"String 3", @"String 4", nil]; 

cell.textLabel.text = [labels objectAtIndex:indexPath.row]; 

在我干的风扇向溶液B趋向,但后来我创建的每个循环数组只是提取一个对象的目的。是否有任何特别的理由使用这两种解决方案之一,还是仅仅是个人偏好?

回答

2

当我这样做时,我使用了一个switch语句。但是,如果你想要去与阵列方法,而不是创建一个数组每一次,你可以使用一个静态C数组或东西:

static NSString * const labels[] = {@"String 1", @"String 2", @"String 3", @"String 4"}; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    //Get the cell in the normal way. No array stuff here 
    //... 
    cell.textLabel.text = labels[indexPath.row]; 
} 
+0

良好的妥协。当我不使用UITableViewGrouped时,我这样做。 – Amagrammer 2009-10-25 15:05:57

1

如果你是坚持解决方案B的粉丝,你可以让你的标签数组是静态的,这将消除每次创建数组的开销。

就哪个更好而言,虽然B在这个简单的例子中肯定是最优雅的,但它也是最不灵活的。图像是一种情况,您可以对每个单元格进行不同的图像更改,选项A使这一更改变得更加干净和可维护。

1

我喜欢的解决方案A.

除非你的数组是预先退出我不会用B.这就是说,我工作的一个应用程序使用的部分,并使用switch语句来确定哪些部分,然后我用预先存在的数组中的数据填充它。