配置自定义UITableViewCell时如何传递参数

时间:2014-03-07 11:37:26

标签: ios objective-c uitableview custom-cell

我有自定义UITableViewCell,我们称之为CustomCell。我只需要在创建时传递一个参数,让我们说NSURL

这是我迄今为止在ViewController

中所做的工作

viewDidLoad

[myTableView registerClass: [CustomCell class] forCellReuseIdentifier: @"CustomItem"]

tableView:cellForRowAtIndexPath:

static NSString *myIdentifier = @"CustomItem"
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier] 

所有这一切都很有效,但我需要使用这个NSURL配置单元格,但只需一次,而不是每次调用cellForRowAtIndexPath。我注意到initWithStyle: reuseIdentifier:中的CustomCell仅被调用一次,但如何通过此调用添加NSURL

2 个答案:

答案 0 :(得分:4)

您只需在NSArray内加载viewDidLoad即可。在cellForRowAtIndexPath:内,您可以添加NSArray中的网址,然后将其插入UITableViewCell

static NSString *myIdentifier = @"CustomItem"
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier]
[cell.labelURL setText:_arrayURLs[indexPath.row]];

您需要做的就是在 CustomCell 中添加一个名为 labelURL 的新属性,并将其与UILabel内的UIStoryboard相关联或xib档案。

考虑一下,你不能只设置一次。 UITableViewCell将重用其UITableViewCells并始终将多次另一个值设置为同一对象。这就是为什么你必须这样做而不仅仅是一次。

答案 1 :(得分:1)

应使用UITableViewCell重复使用相同类型的

cellForRowAtIndexPath:。如果您希望property保持不变,则应该进入 A 区域。如果您希望它更改每个单元格,它应该位于区域 B

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"CustomCell";
    CustomCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault 
                                reuseIdentifier:CellIdentifier];
       // (A) everything inside here happens once 
       // for example

       cell.textLabel.backgroundColor = [UIColor redColor];
    }

    // (B) everything here happens every reuse of the cell
    // for example

    cell.textLabel.text = [NSString stringWithFormat:@"%li",
                            (long)indexPath.row];
    return cell;
}