我在UIButton
中有一个UITableViewCell
。点击UIButton
时,我会在数组中保存点按的按钮标记。因此,当我使用UITableView
在UISearchController
内搜索时,我获得了所需的输出,但是在错误的单元格中选择了所选按钮。
图1 - 选择按钮并在搜索之前
在图1中,我选择了属于"房间1"的按钮,但是在搜索之后,如图2所示,输出正确,但按钮不应该&# 39;选择。如何解决这个问题?
----编辑---- 实施
-(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;
}
搜索实施
-(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];
}
答案 0 :(得分:0)
由于在这里重复使用tableview单元格,你需要创建一个条件,并检查条件是否为真,然后选择按钮,否则按钮是正常的,所以当下一个单元格要重用时,它将根据数组数据显示正确。检查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
}