I have a UIButton
in the UITableViewCell
. When a UIButton
is tapped, I'm saving the tapped button tag in the array. So when I search within the UITableView
using the UISearchController
, I'm getting the desired output, but the selected button is selected within the wrong cell.
Pic 1 - Button selected and before search
pic 2 - After the search
In the pic 1, I have selected the button that belongs to "room 1", but after the search, as you can see in the pic 2, the output is correct, but the buttons shouldn't be selected. How to solve this issue?
---- Edited---- Implementation
-(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 Implementation
-(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];
}