search后表格视图buttonselect错误

我在UITableViewCell有一个UIButton 。 当一个UIButton被轻敲,我正在保存在数组中点击的button标签。 所以当我使用UISearchControllerUITableViewsearch时,我得到了所需的输出,但是在错误的单元格中select了所选的button。

图1 – selectbutton并在search之前

在这里输入图像说明

图片2 – search结束后 在这里输入图像说明

在图片1中,我select了属于“房间1”的button,但在search之后,如图2所示,输出是正确的,但不应该selectbutton。 如何解决这个问题?

—-编辑—-实施

 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (shouldShowSearchresult) { return searchArray.count; } else { return roomNameArray.count; } } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"roomCells"; cell = (roomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (shouldShowSearchresult) { cell.roomName.text = [searchArray objectAtIndex:indexPath.row]; // cell.seatingCapacity.text = [NSString stringWithFormat:@"Seats %@ people",[seatingCapacityArray objectAtIndex:indexPath.row]]; cell.approval.text = @"Approval not required"; } else { cell.roomName.text = [roomNameArray objectAtIndex:indexPath.row]; // cell.seatingCapacity.text = [NSString stringWithFormat:@"Seats %@ people",[seatingCapacityArray objectAtIndex:indexPath.row]]; cell.approval.text = @"Approval not required"; } for (UIButton *slotButton in cell.timeslotScrollView.subviews) { [slotButton removeFromSuperview]; } UIButton *slotButton; cell.timeslotScrollView.contentSize = CGSizeMake(500, 0); cell.timeslotScrollView.scrollEnabled = YES; cell.timeslotScrollView.showsHorizontalScrollIndicator = NO; int buttonSpace = 10; int buttonWidth = 68; int buttonHeight = 35; int yPosition = 0; float xPosition = 0; for (int i=0; i<timeSlotArray.count; i++) { slotButton = [[UIButton alloc]init]; slotButton.frame = CGRectMake(xPosition, yPosition, buttonWidth, buttonHeight); [slotButton setTitle:[NSString stringWithFormat:@"%@", timeSlotArray[i]] forState:UIControlStateNormal]; [slotButton setTitleColor:[UIColor colorWithRed:0.23 green:0.71 blue:0.29 alpha:1.0] forState:UIControlStateNormal] ; slotButton.layer.borderWidth = 2; slotButton.layer.borderColor = [UIColor colorWithRed:0.23 green:0.71 blue:0.29 alpha:1.0].CGColor; slotButton.layer.cornerRadius = 3; slotButton.tag = i; slotButton.userInteractionEnabled = YES; [slotButton addTarget:self action:@selector(didTap:) forControlEvents:UIControlEventTouchUpInside]; xPosition = slotButton.frame.origin.x+buttonWidth+buttonSpace; if (cell.timeslotScrollView.subviews.count < timeSlotArray.count) { [cell.timeslotScrollView addSubview:slotButton]; } } NSArray *tempArray = cell.timeslotScrollView.subviews; NSLog(@"%ld",tempArray.count); return cell; } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cello forRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row==tappedButtonRowIndex) { for (int i = 0; i <cell.timeslotScrollView.subviews.count; i++) { UIView *view = [cell.timeslotScrollView.subviews objectAtIndex:i]; if ([view isKindOfClass:[UIButton class]]) { UIButton *slotTempBtn = (UIButton *)view; BOOL btnFound = false; for (NSString *index in buttonSelectedArray) { if ([index integerValue]== slotTempBtn.tag) { btnFound = true; break; } } if (btnFound) { [slotTempBtn setBackgroundColor:[UIColor greenColor]]; } else { [slotTempBtn setBackgroundColor:[UIColor whiteColor]]; } } } } else { for (UIView *view in cell.timeslotScrollView.subviews) { if ([view isKindOfClass:[UIButton class]]) { UIButton *slotTempBtn = (UIButton *)view; [slotTempBtn setBackgroundColor:[UIColor whiteColor]]; } } } cell.slotButtonDelegate=self; } 

search实施

 -(void)updateSearchResultsForSearchController:(UISearchController *)searchController { [self updateFilteredContentWithSearchText:searchController.searchBar.text]; [_roomTableView reloadData]; } - (void)updateFilteredContentWithSearchText:(NSString*)searchText { [searchArray removeAllObjects]; for (NSString *room in roomNameArray) { NSRange nameRange = [room rangeOfString:searchText options:NSCaseInsensitiveSearch]; if (nameRange.location != NSNotFound) { [searchArray addObject:room]; } } self.roomTableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero]; } -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { if (searchBar.text.length >= 1) { shouldShowSearchresult = true; } else { shouldShowSearchresult = false; } [_roomTableView reloadData]; } -(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { shouldShowSearchresult = false; [_roomTableView reloadData]; } 

由于tableview单元格在这里被重用,所以你需要创build一个条件并在条件为true的情况下检查,然后button被选中,否则button是正常的,所以当下次单元格要重用时,它将显示每个数组的数据。 检查你的tableView cellForRow method中的条件

 if yourArray.count > 0 { //check your array and set cell's button selection as per id or tag } else { //set all cells all the button unselected }