重新加载 tableview 的活动单元格
Reloading Active cells of tableview
我正在 iOS 上开发面向 iOS 7.0 及更高版本的应用程序。
现在,我的问题是如何重新加载屏幕上可见的 UITableView 行。我正在使用动态单元格。
实际上,在选择一个选项时,我正在更改一些颜色,例如每个单元格的标题颜色,但是那些已经加载到屏幕上的单元格没有改变,如果我正在加载整个 table 那么它需要很久了。
等待您的回复。
代码
//单击此按钮颜色正在更新
- (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;
}
}
问候:
赛米森阿里
初级软件开发人员
如果您实现自定义单元格子类化 UITableViewCell,则可以实现 prepareForReuse 方法。您可以在该方法中重置一些属性示例、alpha、选择状态。
最简单的方法是:
[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
,否则您的table可能会导致应用程序崩溃。
我正在 iOS 上开发面向 iOS 7.0 及更高版本的应用程序。 现在,我的问题是如何重新加载屏幕上可见的 UITableView 行。我正在使用动态单元格。
实际上,在选择一个选项时,我正在更改一些颜色,例如每个单元格的标题颜色,但是那些已经加载到屏幕上的单元格没有改变,如果我正在加载整个 table 那么它需要很久了。
等待您的回复。
代码
//单击此按钮颜色正在更新
- (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;
}
}
问候: 赛米森阿里
初级软件开发人员
如果您实现自定义单元格子类化 UITableViewCell,则可以实现 prepareForReuse 方法。您可以在该方法中重置一些属性示例、alpha、选择状态。
最简单的方法是:
[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
,否则您的table可能会导致应用程序崩溃。