Reputation: 1091
I have a problem, here is my code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UIImageView *tickImg = [[UIImageView alloc]init];
tickImg.frame = CGRectMake(260, 28, 30, 30);
NSInteger rowNum;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
if(searching)
{
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
[cell.imageView setImageWithURL:[NSURL URLWithString:[tempArr objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
}else
{
for (int i=0; i<[alertArray count]; i++) {
NSString *temp = [NSString stringWithFormat:@"%@",[alertArray objectAtIndex:i]];
if ([[friendsID objectAtIndex:indexPath.row] isEqualToString:temp]) {
rowNum = indexPath.row;
NSLog(@"Row: %d",rowNum);
}
}
if (rowNum == indexPath.row) {
tickImg.image = [UIImage imageNamed:@"tick.png"];
[cell.contentView addSubview:tickImg];
}
[cell.imageView setImageWithURL:[NSURL URLWithString:[friendsImage objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
cell.textLabel.text = [friendsName objectAtIndex:indexPath.row];
}
return cell;
}
Here I have two arrays, one is friendsID and the other is alertArray. I have loaded the friendsID to the tableview. And in the alertArray I have some IDs, I need to show a tick mark in the row when friendsID in a row contains alertArray. I have tried with above code but not working. Please share your ideas. Thanks.
Upvotes: 0
Views: 1244
Reputation: 40018
Hi I have made some addition as well as removed some code too.
I don't know whether it will run perfectly but I know that if you read this code then you surely get the idea what is wrong.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
/* not needed here
UIImageView *tickImg = [[UIImageView alloc]init];
tickImg.frame = CGRectMake(260, 28, 30, 30);
NSInteger rowNum;
*/
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//Here is my code
//removing the tickImg if it is in the super view
UIView *vw = [cell.contentView viewWithTag:99];
if(vw != nil){
[vw removeFromSuperview];
}
//code endds here
if(searching)
{
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
[cell.imageView setImageWithURL:[NSURL URLWithString:[tempArr objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
}else
{
for (int i=0; i<[alertArray count]; i++) {
NSString *temp = [NSString stringWithFormat:@"%@",[alertArray objectAtIndex:i]];
if ([[friendsID objectAtIndex:indexPath.row] isEqualToString:temp]) {
/* this is not needed
rowNum = indexPath.row;
NSLog(@"Row: %d",rowNum);
*/
//Here is my code
UIImageView *tickImg = [[UIImageView alloc]init];
//just giving the tag so that I can get it back when cell is reused. other wise you can use the custom cell and have a reference for this image view
tickImg.tag = 99;
tickImg.frame = CGRectMake(260, 28, 30, 30);
//end of code
tickImg.image = [UIImage imageNamed:@"tick.png"];
[cell.contentView addSubview:tickImg];
[tickImg release]; //if you are not using ARC
break;
//end of code
}
}
/* this is also not needed
if (rowNum == indexPath.row) {
tickImg.image = [UIImage imageNamed:@"tick.png"];
[cell.contentView addSubview:tickImg];
}
*/
[cell.imageView setImageWithURL:[NSURL URLWithString:[friendsImage objectAtIndex:indexPath.row]]
placeholderImage:[UIImage imageNamed:@"defaultPerson.png"]];
cell.textLabel.text = [friendsName objectAtIndex:indexPath.row];
}
return cell;
}
Upvotes: 1