iOS TableView如何访问自定义单元格变量

时间:2013-12-22 22:59:06

标签: ios objective-c uitableview tableview

我有一个表格视图

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    **NSString *channelID = [object objectForKey:@"channelID"];**

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell==nil)
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
                                     reuseIdentifier:CellIdentifier];

}

我正在访问一个tableview单元格,如下所示:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    for (NSIndexPath *path in [tableView indexPathsForVisibleRows]) {
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];
    }
    //I want to access cell.ChannelID //
}

如何访问channelID变量? 当用户停止滚动时,我想访问可见的单元格和自定义变量。

由于

3 个答案:

答案 0 :(得分:4)

如果需要自定义UITableView单元,则需要创建UITableView单元的子类。从那里,您需要在此自定义单元格上为您的对象声明一个属性。确保公开声明此属性。从我在你的代码中看到的,它应该是这样的。

@interface MyCustomCell : UITableViewCell

@property (strong, nonatomic) NSDictionary *myObject;

@end

从那里,您需要将单元子类的标头导入到表视图委托/数据源方法使用的实现文件中,而不是在cellForRowAtIndexPath中引用UITableViewCell:引用您的子类,然后将值设置为新增物业。

- (MyCustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    NSString *channelID = [cell.myObject objectForKey:@"channelID"];

    [cell.textLabel setText:channelID];

    return cell;
}

当然,不用说你首先需要提供逻辑来传播这个词典。然后,就滚动视图委托方法而言,您有类似的问题。您无法访问UITableViewCell基类上的自定义对象。您再次需要引用您的子类。这可以通过简单的演员在这里轻松完成。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    for (NSIndexPath *path in [tableView indexPathsForVisibleRows]) {
        MyCustomCell *cell = (MyCustomCell *)[self.tableView cellForRowAtIndexPath:path];

        NSString *channelID = [cell.myObject objectForKey:@"channelID"];
        //
    }
}

答案 1 :(得分:1)

0x7fffffff答案有效。您也可以使用此功能并跳过空检查。

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

    NSString *channelID = [cell.myObject objectForKey:@"channelID"];

    [cell.textLabel setText:channelID];
}

但是你必须通过在viewDidLoad中注册它来声明“CustomCell”是什么,否则你将得到一个例外:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"CustomCell"];
}

我更喜欢这个,因为它使dequeueReusableCellWithIdentifier: forIndexPath:保证返回一个单元格并使cellForRowAtIndexPath更清洁一点。但要么也可以。

答案 2 :(得分:0)

你确定channelID是UITableViewCell的成员吗?如果您已经亚化了UITableViewCell并使用自己的自定义tableview单元格,则需要使用该类