如何在不同条件下的同一个地方的uitableview单元格上使用imageview和textfield

时间:2013-07-01 14:04:06

标签: iphone ios ipad uitableview ios6

我必须用三个条件实现UiTableView。

  1. 在一个条件中,我必须显示“Invite”等文字。
  2. 在第二种情况下,我必须显示“邀请”等文字。
  3. 在第三种情况下,如果邀请人加入,我必须显示图像。
  4. 当我仅使用文本更改时,它工作正常,但当我用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;
    

    }

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果我理解你的正确方法。你有一个tabůe视图,根据从某处加载的数据动态加载?期待网络......

表格视图正在抛弃 NOT DISPLAYED CELLS 。因此,如果您以编程方式更改单元格,则存在问题。

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

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

我建议你阅读docs和UITableDataSourceDelegate以及UITableViewDelegate和方法说明。

Table View delegate TableViewDatasource

在数据源中你会特别感兴趣的方法: 的 的tableView:的cellForRowAtIndexPath: