我有一个表格视图
- (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变量? 当用户停止滚动时,我想访问可见的单元格和自定义变量。
由于
答案 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单元格,则需要使用该类