我正在针对iOS 7.0及更高版本的iOS上开发应用程序。 现在,我的问题是如何重新加载在屏幕上可见的UITableView行。我正在使用动态细胞。
实际上在选择一个选项时我改变了一些颜色,比如每个单元格的标题颜色,但是那些已经加载到屏幕上的单元格没有改变,如果我加载整个表格,那么它需要很长时间
等待您的回复。
代码
//点击此按钮颜色正在更新
- (IBAction)btnDone:(id)sender {
appDel.selectedMood=_moodDetView.str;
appDel.barColor=_moodDetView.backgroundColor;
self.navigationController.navigationBar.barTintColor = _moodDetView.backgroundColor;
//[self.mainTblView reloadData];
[self.menuView setBackgroundColor:appDel.barColor];
[_moodDetView setHidden:YES];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//For menu contents
if (tableView.tag==2) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.font = [UIFont fontWithName:@"Futura" size:14.0];
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.backgroundColor = [UIColor clearColor];
}
switch (indexPath.row) {
case 0:
{
cell.textLabel.text=@"Select Mood";
}
break;
case 1:
{
cell.textLabel.text=@"Search by Author";
}
break;
case 2:
{
cell.textLabel.text=@"Search by Category";
}
break;
case 3:
{
cell.textLabel.text=@"Favorites";
}
break;
case 4:
{
cell.textLabel.text=@"Feeds";
}
break;
default:
break;
}
return cell;
}
//for main table
else{
// Configure the cell...
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
FeedCustomCell* CELL=( FeedCustomCell *)cell;
CELL.cellImageView.layer.cornerRadius=CELL.cellImageView.frame.size.width/2;
CELL.cellImageView.clipsToBounds=YES;
CELL.gesRec=[[CustomTapGestureRecognizer alloc]initWithTarget:self action:@selector(authorBtnTouched:)];
[CELL.lblAuthName setTextAlignment:NSTextAlignmentJustified];
[CELL.lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]];
NSString * str=[NSString stringWithFormat:@"%@",[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorId"]];
UIImage * img=[UIImage imageNamed:str];
CELL.cellImageView.image=img?img:[UIImage imageNamed:@"n3"];
[CELL.lblAuthName addGestureRecognizer:CELL.gesRec];
CELL.gesRec.authorImage=CELL.cellImageView.image;
NSString * authName=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"authorName"];
[CELL.lblAuthName setText:authName];
[CELL.gesRec setAuthorId:(int)str.integerValue];
[CELL.gesRec setAuthorName:authName];
[CELL.txtViewQuote setTextColor:appDel.barColor];
CELL.txtViewQuote.text=[[dataArray objectAtIndex:indexPath.row] objectForKey:@"quoteTxt"];
CGSize sizeThatShouldFitTheContent = [CELL.txtViewQuote sizeThatFits:CELL.txtViewQuote.frame.size];
CELL.heightConstraintOfTxtView.constant = sizeThatShouldFitTheContent.height;
[CELL.contentView sizeToFit];
return CELL;
}
}
问候: Syed Meesum Ali
初级软件开发人员
答案 0 :(得分:0)
如果实现自定义单元子类UITableViewCell,则可以实现prepareForReuse方法。您可以在该方法中重置某些属性示例,alpha,选择状态。
答案 1 :(得分:0)
最简单的方法是:
[myTable reloadRowsAtIndexPaths:myTable.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationAutomatic];
但是,由于您正在寻找更优化的方式,以下情况会更好:
单击按钮,在目标方法中,迭代可见单元格,并在每个单元格中进行相关更改。
- (IBAction)btnDone:(id)sender {
for (UITableViewCell* cell in yourTable.visibleCells) {
if ([cell isKindOfClass:[FeedCustomCell class]]) {
[((FeedCustomCell*)cell).lblAuthName setTextColor:[AppDelegate invertColor:appDel.barColor]];
}
}
}
这应该方式更快,重新加载(绘制)所有可见单元格。
ALSO ,一句忠告。对不同类型的单元格使用不同的 reuseIdentifer
,否则您的表格可能会导致应用崩溃。