tableViews中的搜索和选中标记

时间:2013-12-17 04:55:16

标签: ios objective-c uitableview uisearchbar

我正在尝试在iOS中创建一个搜索栏,并将其设置为过滤结果的位置,然后当您点击它时,它会显示一个复选标记。当我删除搜索文本时,复选标记消失,单元格的整页显示,但我没有选中带有复选标记的搜索单元格。有人可以修改下面的代码来帮助我吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableSet *selectedUsers = [NSMutableSet set];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath];


PFUser *user;
if (self.userResults != nil)
{
    user = [self.userResults objectAtIndex:indexPath.row];
}
else
{
    user = [self.allUsers objectAtIndex:indexPath.row];
}
cell.textLabel.text = user.username;


if ([selectedUsers containsObject:user])
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}
if ([selectedUsers containsObject:user])
{
    // user already selected

}
else
{
    // select user
    [selectedUsers addObject:user];
}


return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath   {
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

cell.accessoryType = UITableViewCellAccessoryCheckmark;
PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];
PFUser *user = [self.allUsers objectAtIndex:indexPath.row];
[friendsRelation addObject:user];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (error) {
        NSLog(@"Error %@ %@", error, [error userInfo]);

    }    }];






}

3 个答案:

答案 0 :(得分:1)

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{
    NSMutableSet *selectedUsers = [NSMutableSet set];
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier      forIndexPath:indexPath];  
PFUser *user;
if (self.userResults != nil)
{
     user = [self.userResults objectAtIndex:indexPath.row];
}
else
{
     user = [self.allUsers objectAtIndex:indexPath.row];
}
cell.textLabel.text = user.username; 
if ([selectedUsers containsObject:user])
{
     cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
     cell.accessoryType = UITableViewCellAccessoryNone;
} 
     return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath   {
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];


PFRelation *friendsRelation = [self.currentUser relationforKey:@"friendsRelation"];
PFUser *user = [self.allUsers objectAtIndex:indexPath.row];
[friendsRelation addObject:user];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (error) {
    NSLog(@"Error %@ %@", error, [error userInfo]);

}    }];

PFUser *user1;
if (self.userResults != nil)
{
     user1 = [self.userResults objectAtIndex:indexPath.row];
}
else
{
     user1 = [self.allUsers objectAtIndex:indexPath.row];
}
if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
{
    cell.accessoryType = UITableViewCellAccessoryNone;
    [selectedUsers removeObject:user1];
}
else
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [selectedUsers addObject:user1];
}

}

看看这是否有帮助。

答案 1 :(得分:0)

关键是当你关闭搜索栏时会重新加载表格视图。这次你必须记录用户选择的所有单元格索引路径。这是你在didSelectRowAtIndexPath委托方法中做的,并保存在数组值中用户选择。

并且在cellForRowAtIndexPath中,您可以检查数组中indexPath所在的所有单元格。

希望你明白了......

答案 2 :(得分:0)

 NSMutableArray *array=[[NSMutableArray alloc]init];

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if
   ([selectedBillsArray containsObject:indexPath])    {
                  cell.accessoryType=UITableViewCellAccessoryCheckmark;    }        

   }

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
       UITableViewCell *cell= [tableView cellForRowAtIndexPath:indexPath];

       if (cell.accessoryType==UITableViewCellAccessoryCheckmark)
       {
           [cell setAccessoryType:UITableViewCellAccessoryNone];

           [selectedBillsArray removeObject:[NSString stringWithFormat:@"%i",indexPath];
       }
       else
       {
           [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
          [selectedBillsArray addObject:[NSString stringWithFormat:@"%i",indexPath];
       }
       }

做这样的事......