gpt4 book ai didi

ios - cellForRowAtIndexPath 是如何工作的?

转载 作者:IT老高 更新时间:2023-10-28 11:32:34 26 4
gpt4 key购买 nike

我已经阅读了苹果文档,对于像我这样的 Objective-C 初学者来说,这是无法理解的。我正在尝试在此 link 之后实现多列 UITableView示例,它只是不起作用,所以我需要理解 cellForRowAtIndexPath 是如何工作的,因为对我个人而言,这种方法似乎相当复杂。

1) 它返回什么? UITableViewCell?但为什么看起来如此奇怪?

-(UITableViewCell *)tableView:(UITableView *)tableView 
  • 那是什么?你能解释一下吗?

2) 它是如何被调用的,更重要的是我如何将它连接到某个 UITableView ???如果我有两个名为 firstTableViewsecondTableViewUITableView 并且我希望它们不同(执行 cellForRowAtIndexPath 不同)?我应该如何将我的 UITableViews 链接到这个

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

该方法接受 NSIndexPath,而不是 UITableView。我该怎么办?

最佳答案

我会尝试分解它(来自 documention 的示例)

/* 
* The cellForRowAtIndexPath takes for argument the tableView (so if the same object
* is delegate for several tableViews it can identify which one is asking for a cell),
* and an indexPath which determines which row and section the cell is returned for.
*/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

/*
* This is an important bit, it asks the table view if it has any available cells
* already created which it is not using (if they are offScreen), so that it can
* reuse them (saving the time of alloc/init/load from xib a new cell ).
* The identifier is there to differentiate between different types of cells
* (you can display different types of cells in the same table view)
*/

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

/*
* If the cell is nil it means no cell was available for reuse and that we should
* create a new one.
*/
if (cell == nil) {

/*
* Actually create a new cell (with an identifier so that it can be dequeued).
*/

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"] autorelease];

cell.selectionStyle = UITableViewCellSelectionStyleNone;

}

/*
* Now that we have a cell we can configure it to display the data corresponding to
* this row/section
*/

NSDictionary *item = (NSDictionary *)[self.content objectAtIndex:indexPath.row];
cell.textLabel.text = [item objectForKey:@"mainTitleKey"];
cell.detailTextLabel.text = [item objectForKey:@"secondaryTitleKey"];
NSString *path = [[NSBundle mainBundle] pathForResource:[item objectForKey:@"imageKey"] ofType:@"png"];
UIImage *theImage = [UIImage imageWithContentsOfFile:path];
cell.imageView.image = theImage;

/* Now that the cell is configured we return it to the table view so that it can display it */

return cell;

}

这是一个 DataSource 方法,因此它将在任何已将自己声明为 UITableViewDataSource 的对象上调用。当表格 View 实际需要根据行数和节数(您在其他 DataSource 方法中指定)在屏幕上显示单元格时调用它。

关于ios - cellForRowAtIndexPath 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com