我有一个小表视图,最多可能有10个项目,我不想使用dequeueReusableCellWithIdentifier
方法。原因是,每次我滚动表视图时,我都会在第一行代替最后一行,这需要几秒钟的时间来更新回来以获得最后一行的更新。
我正在使用原型单元格,我尝试删除:
JsonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
但它在表视图中返回空白单元格。
所以这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
JsonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell=[[JsonTableViewCell alloc]initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
我也试着保留
JsonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
并将单元格配置为:
if (cell == nil) {
cell.title.text = titleStrip;
}
但是在这种情况下,我在故事板中得到了原型单元格。它不是空白,但没有填充数据。
任何人都可以告诉我我做错了什么?
更新**** 10.10.2014 *******
也许所有代码都有帮助:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return myObject.count;
}
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
JsonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell=[[JsonTableViewCell alloc]initWithStyle:
UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
NSDictionary *tmpDict = [myObject objectAtIndex:indexPath.row];
NSMutableString *text;
text = [NSMutableString stringWithFormat:@"%@",
[tmpDict objectForKeyedSubscript:title]];
NSMutableString *detail;
detail = [NSMutableString stringWithFormat:@"%@ ",
[tmpDict objectForKey:content]];
NSURL *url = [NSURL URLWithString:[tmpDict objectForKey:thumbnail]];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc]initWithData:data];
NSString *titleStrip = [[text description] stringByReplacingOccurrencesOfString:@""withString:@""];
NSString *detailStrip = [[detail description] stringByReplacingOccurrencesOfString:@""withString:@""];
dispatch_sync(dispatch_get_main_queue(), ^{
cell.titreNews.text = titleStrip;
cell.detailNews.textAlignment = NSTextAlignmentJustified;
cell.detailNews.text = detailStrip;
UIImage *image0 = [UIImage imageNamed:@"video.png"];
if (img != nil) {
cell.imageNews.image = img;
}
else {
cell.imageNews.image = image0;
}
});
});
[cell setAccessoryType:UITableViewCellAccessoryNone];
return cell;
}
答案 0 :(得分:3)
首先,欢迎来到Stack Overflow!
其次,我 高度 建议不要禁用出列。 Apple在预期的行为方面是非常严格的,并且尝试重新运行像TableView这样的基本UI元素以不同的方式工作可能会轻易地让您的应用被拒绝。此外,出列是一件好事,这有助于减少内存使用量并简化一般事情。找到一种设计自己的代码的方法要好得多,因此它可以用于出列的工作。
话虽如此,据我所知,你需要做的就是省略dequeueReusableCellWithIdentifier
行,它应该有效。 cell
每次都会nil
,因此每次都会从头开始重新初始化。
答案 1 :(得分:3)
这个代码块永远不会被调用,因为你在它之前实例化一个单元格(单元格永远不是nil)。
if (cell == nil) {
cell.title.text = titleStrip;
}
如果您不使用它们,请不要调用出列方法。将您的方法更改为:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Don't even try to dequeue, just create new cell instance
JsonTableViewCell *cell = [[JsonTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cell.title.text = titleStrip;
return cell;
}