如何为TableView中的单元格提供唯一引用

时间:2013-05-13 09:10:23

标签: ios objective-c uitableview

我仍然是iOS开发的新手,所以请耐心等待。

我有一个使用静态单元格的TableView来包含选项(点击查看),我可以选择细胞。我想为每个单元格分配一个值(标识符),这样当选择或取消选择单元格时,我可以在数组中添加/删除它。然后,编辑完成后,使用存储在数组中的引用来更新相应的CoreData属性。

我的谷歌技能今天让我失望了,所以非常感谢正确的方向推进。

感谢。

4 个答案:

答案 0 :(得分:4)

NSIndexPath是最好的工具!它对于选定的单元格是唯一的。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%i", indexPath.row);
    NSLog(@"%i", indexPath.section);
}

我认为你需要这个:

[yourArray objectAtIndex:indexPath.row]; 

获得参考。

答案 1 :(得分:0)

您可以在方法

中选择单元格时添加有关单元格的详细信息
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

用于在委托方法

中取消选择单元格时删除详细信息
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

答案 2 :(得分:0)

您无需保留对每个单元格的引用。数据源应该是屏幕上显示内容的镜像。您可以使用以下命令知道应删除的内容:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

或取消选择时:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

使用NSIndexPath,您可以知道已选择/取消选择的内容:

答案 3 :(得分:0)

根据我的理解,您希望选择/取消选择UITableView行,并在删除表格中的任何行后,您希望它也应从DB中删除。

你可以使用方法 -

  - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if(editingStyle==UITableViewCellEditingStyleDelete)
        {

            [code to remove object from db on particular property];     

         }

     }

现在,从DB中删除特定记录/行的代码是 -

-(void)deleteUserForId:(NSString *)user_id
{
    NSManagedObject *statusTag=[self getUserForUserid:user_id];
    NSError *error;

    [managedObjectContext deleteObject:statusTag];
    if (![managedObjectContext save:&error]) 
    {

    }

}

-(UserData*)getUserForUserid:(NSString *)user_id
{
    NSFetchRequest *request = [self getBasicRequestForEntityName:@"UserData"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"user_id== %@",user_id];


    [request setPredicate:predicate];
    [request setReturnsObjectsAsFaults:NO];

    NSError *error = nil;
    NSArray *results = [managedObjectContext executeFetchRequest:request error:&error];  

    UserData *userInfoObj = nil;
    if (!error && [results count] > 0)
    {

        userInfoObj = [results objectAtIndex:0];

    }

    return userInfoObj;
}