我必须用三个条件实现UiTableView。
当我仅使用文本更改时,它工作正常,但当我用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;
}
有什么建议吗?
答案 0 :(得分:0)
如果我理解你的正确方法。你有一个tabůe视图,根据从某处加载的数据动态加载?期待网络......
表格视图正在抛弃 NOT DISPLAYED CELLS 。因此,如果您以编程方式更改单元格,则存在问题。
每当视图向下滚动并且您的单元格被隐藏时,单元格将从内存中释放...并且在显示时它将完全重新加载。所以正在调用方法cellForRowAtIndexPasth:。
所以我建议你有一个数组或任何合理的结构,你将存储连接用户的值,尤其是行索引。然后在您的cellForRowAtIndexPath:方法中,您只需检查单元格是否已被修改。如果是,则显示所需信息,如果不是,则通常返回未修改的单元格。
我建议你阅读docs和UITableDataSourceDelegate以及UITableViewDelegate和方法说明。
Table View delegate TableViewDatasource
在数据源中你会特别感兴趣的方法: 的 的tableView:的cellForRowAtIndexPath: 强>