如何在不同条件下在同一位置的 uitableview 单元格上使用 imageview 和 textfield
Posted
技术标签:
【中文标题】如何在不同条件下在同一位置的 uitableview 单元格上使用 imageview 和 textfield【英文标题】:How to use imageview and textfield on uitableview cells at the same place on different conditions 【发布时间】:2013-07-01 14:04:05 【问题描述】:我必须在三个条件下实现 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;
【问题讨论】:
您能否发布更多关于如何加载数据的代码,以便我可以更好地指导您如何处理 TableView 委托方法? 我保证这与他们的出队方式有关。 感谢您的回复。我已经用我的代码编辑了我的问题。 不使用UiTableview的复用性是否安全。 【参考方案1】:如果我以正确的方式理解你。您有一个基于从某处加载的数据动态加载的选项卡视图?期待网络……
表格视图正在丢弃 NOT DISPLAYED CELLS。因此,如果您以编程方式更改单元格,则会出现问题。
每当视图向下滚动并且您的单元格被隐藏时,单元格就会从内存中释放...并且当它显示时它会完全重新加载。所以方法 cellForRowAtIndexPasth: 正在被调用。
所以我建议你有一个数组或任何合理的结构,你将存储连接用户的值,尤其是行索引。然后在你的 cellForRowAtIndexPath: 方法中,你只需检查单元格是否被修改。如果是,则显示所需信息,如果不是,则像往常一样返回未修改的单元格。
我建议你阅读文档和 UITableDataSourceDelegate 和 UITableViewDelegate 和方法描述。
Table View delegate TableViewDatasource
在数据源中,您会特别对方法感兴趣: tableView:cellForRowAtIndexPath:
【讨论】:
感谢您的回复。请查看我编辑的问题,您可以更好地理解我的问题并建议我一条出路。 您的表格视图中有部分吗? 不使用UiTableview的复用性是否安全。以上是关于如何在不同条件下在同一位置的 uitableview 单元格上使用 imageview 和 textfield的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用数据集的情况下在 Matlab 上比较不同的面部图像?
是否可以在不使用 python 移动终端行的情况下在同一位置打印“for循环”表?