0

我必须在三个条件下实现 UiTableView。

  1. 在一种情况下,我必须显示诸如“邀请”之类的文本。
  2. 在第二种情况下,我必须显示“已邀请”之类的文字。
  3. 在第三种情况下,如果受邀者已加入,我必须显示图像。

当我只使用文本更改时,它工作正常,但是当我用 imageview 替换 textfield 时,它会随机显示 textfield 和 Imageview。

我已经指出,表方法调用速度太快,以至于编译器无法读取某些条件。即使我放了条件,有时即使它的值为false,它也会进入循环。就像这种情况。

我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ExampleCell";

NSLog(@"indexpath ==%d",indexPath.row);

ExampleCell *cell = (ExampleCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    cell = [[[ExampleCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

NSDictionary *dic=[self.FriendsDataArray objectAtIndex:indexPath.row];

UILabel *Label=(UILabel *) [cell viewWithTag:202];
Label.text=[dic objectForKey:@"name"];

NSString *FriendsIdArrayString=[FriendsIdArray objectAtIndex:indexPath.row];

 UIImageView *Image=(UIImageView*) [cell viewWithTag:203];

UIButton *Button=(UIButton*) [cell viewWithTag:201];
[Button addTarget:self action:@selector(ButtonAction:) forControlEvents:UIControlEventTouchUpInside];


if([self.InvitedFriendsArray count]==0)
{
   [Button setTitle:@"Invite" forState:UIControlStateNormal];
}
else
{
    for(int i=0; i< [self.InvitedFriendsArray count];i++)
    {
        NSString *InvitedFriendIdString=[self.InvitedFriendsArray objectAtIndex:i];
        
        InvitedFriendIdString=[NSString stringWithFormat:@"%@",InvitedFriendIdString];
        
        InvitedFriendIdString=[InvitedFriendIdString stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceCharacterSet]];
        
        FriendsIdArrayString=[NSString stringWithFormat:@"%@",FriendsIdArrayString];
        
        FriendsIdArrayString=[FriendsIdArrayString stringByTrimmingCharactersInSet:
                 [NSCharacterSet whitespaceCharacterSet]];
        
        if([self.GetConnectedFriendsArray containsObject:FriendsIdArrayString])
        {
            NSLog(@"IndexPath.row====%d",indexPath.row);
            
                [Button setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
                [Button setTitle:@"" forState:UIControlStateNormal];
            
            Image.image=[UIImage imageNamed:@"graph.png"];
            break;
        }
        else
        {
            Image.image=[UIImage imageNamed:@""];
            
            if([self.InvitedFriendsArray containsObject:FriendsIdArrayString])
               {
                   [Button setTitle:@"Sent" forState:UIControlStateNormal];
                   break;
               }
               else
               {
                   [Button setTitle:@"Invite" forState:UIControlStateNormal];
                   break;
               }
        }
    }
}

// Configure the cell.
[cell setFlickrPhoto:[ImageUrlArray objectAtIndex:indexPath.row]];

return cell;

}
4

1 回答 1

0

如果我以正确的方式理解你。您有一个基于从某处加载的数据动态加载的选项卡视图?期待网络……

表格视图正在丢弃未显示的单元格。因此,如果您以编程方式更改单元格,则会出现问题。

每次视图向下滚动并且您的单元格被隐藏时,单元格都会从内存中释放...并且当它显示时它会完全重新加载。所以方法 cellForRowAtIndexPasth: 被调用。

所以我建议你有一个数组或任何合理的结构,你将存储连接用户的值,尤其是行索引。然后在你的 cellForRowAtIndexPath: 方法中,你只需检查单元格是否被修改。如果是,则显示所需信息,如果不是,则像往常一样返回未修改的单元格。

我建议你阅读文档和 UITableDataSourceDelegate 和 UITableViewDelegate 和方法描述。

表视图委托 TableViewDatasource

在数据源中,您将对方法特别感兴趣: tableView:cellForRowAtIndexPath:

于 2013-07-01T14:48:36.900 回答