作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很抱歉再次发布这个问题,但我已经研究了很多答案,但没有一个对解决我的问题有帮助。
所以这是我的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"radioCell";
RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
}
[self configureCommentCell:cell atIndexPath:indexPath];
return cell;
}
当我向下滚动时,我的单元格变得困惑并且重复了一些数据,所以我试过这个:
static NSString *CellIdentifier = @"memberCell";
RadioCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}
还有这个:
RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
}
但这并没有解决我的问题,我得到了白色的空单元格?请问如何解决这个问题?
更新
- (void)configureCommentCell:(RadioTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
NSDictionary *object;
if ([_dataArray[indexPath.section] isKindOfClass:[NSArray class]])
object = [_dataArray[indexPath.section] objectAtIndex:indexPath.row];
else
object = [[_dataArray[indexPath.section] valueForKey:@"radioList"] objectAtIndex:indexPath.row];
if (object[@"jsonUrl"]) {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:object[@"jsonUrl"] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSDictionary *tempObject = (NSDictionary *) responseObject;
if (![[responseObject objectForKey:@"type"] isEqualToString:@"error"]) {
NSDictionary *tempObject = [responseObject[@"data"] objectAtIndex:0];
cell.playingNow.text = tempObject[@"song"];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
cell.name.text = [NSString stringWithFormat:@" %@", object[@"title"]];
if (object[@"logoUrl"])
[cell.logo setImageWithURL:[NSURL URLWithString:object[@"logoUrl"]]];
}
最佳答案
我看到您的问题是您正在获取在 cellForRowAtIndexPath
中调用的 configureCommentCell
中的单元格数据。这是错误的,因为在 cellForRowAtIndexPath
中获取数据为时已晚,在此委托(delegate)方法中您应该返回单元格。
可以在从服务器检索数据之前调用此行:
cell.name.text = [NSString stringWithFormat:@" %@", object[@"title"]];
相反,您应该:
在单独的方法中获取数据,例如 fetchData
当数据在 AFNetworking
方法的完成 block 中下载时,将数据存储在 NSArray
中,例如 myDataArray
仍在完成 block 内调用 [self.tableView reloadData];
在 viewDidLoad 方法中调用你的方法 fetchData
您的cellForRowAtIndexPath
应该如下所示:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// hey please give me the cell to display ... harry up please
// please harry up ! oh my god you are fetching data from server
// while I am asking for the cell !
// ok I don't care do what you want
// I will return an empty cell anyway
// and guess what I will not take in consideration
// the retried data because it's inside a block
// which is called asynchronously
static NSString *cellIdentifier = @"radioCell";
RadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) {
cell = [[RadioTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; }
// now before return the cell you need to update the content of cell
// maybe you have an array of items and you should update the label
// for example here and then return the cell
cell.usernameLabel = self.myDataArray[indexPath.row]; // example
return cell;
}
关于ios - 滚动时 UItableView 弃用单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455586/
我是一名优秀的程序员,十分优秀!