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

Posted

技术标签:

【中文标题】iOS TableView如何访问自定义单元格变量【英文标题】:iOS TableView how to access custom cell variables 【发布时间】:2013-12-22 22:59:06 【问题描述】:

我有一个表格视图

- (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];


我正在像这样访问一个表格视图单元格:

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

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

谢谢

【问题讨论】:

【参考方案1】:

如果你想要一个自定义的 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"];
        //
    

【讨论】:

【参考方案2】:

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 更干净一些。但两者都同样有效。

【讨论】:

【参考方案3】:

你确定 channelID 是 UITableViewCell 的成员吗?如果你已经继承了 UITableViewCell 并且正在使用你自己的自定义 tableview 单元格,你想使用那个类

【讨论】:

以上是关于iOS TableView如何访问自定义单元格变量的主要内容,如果未能解决你的问题,请参考以下文章

从自定义单元格访问父视图

如何在一个 tableView 中使用两个不同的自定义单元格?使用情节提要,iOS 7

具有动态标签高度的 IOS Tableview 自定义单元格

在 iOS 中访问自定义 UITableViewCell 中的视图

如何在 TableView 中调整自定义单元格的大小?

如何在swift ios中的自定义TableView单元格中显示多个字符串值到多个标签?