I have run into a bit of a problem. Usually when dealing with UITableView I will build a special method, configureCell, that builds the cells as the tableView needs them. So cellForRowAtIndexPath queries the configureCell to get a new cell if none is found in the cache.
在每次用户滚动时执行的cellForRowAtIndexPath的部分:
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
//this part is always executed!
}
我从我的模型中设置了标签值等等。这运作得很好,我相信这是为了正常工作并对CPU的负担最小。从我所能读的TableView指南中可以看出。
我的问题现在是,我的tableView中的第一个单元格与其他单元格不同。它有一个特殊的图标和其他的东西,可以将它与其他单元格分开。
在我的配置单元格中,我尝试询问:
if (indexPath.row == 0) {
//do special setup!
}
This is a bad idea as the tableView lazy loads the cells and therefore the first cell that is off-screen, when being scrolled on-screen, will also get indexPath.row = 0
so now I have a "special cell" for every 7 cells.
How do I get around this one?
第二个问题也源于上述问题: 我有一个习惯<条码>,在所有囚室安装<条码>。 当用户开发一个“Edit”纽芬兰语时,所有囚室的密码都应当改写成一个显示我们处于“Edit”模式的元件。 在这里,只有屏幕上的囚室才会发生这种情况,当时,滚动“旧”囚室要么与海滩相隔,要么正在建造新的囚室,而这种牢房又知道我们有ed。
当您点击一个单元格时,该单元格的indexPath.row
永远不会有任何疑问,您需要将此索引与您的模型数组匹配,以确定用户点击了什么。但当TableView操作单元格(将它们拉到屏幕上,离开屏幕,删除,添加)时,似乎适用不同的规则。
我猜,我的问题是;为了遵循最佳实践,不与SDK对抗,我应该做什么来获得所需的功能,在细胞生命周期的哪个阶段应用此逻辑?
希望有人可以指导我朝正确的方向:)提前感谢您:)