我有包含表格 View 和搜索栏的 View 。当我开始搜索时,它应该搜索 tableview。下面是附图中tableview的示例数据:
STUDENT 1、STUDENT 2 是表中的不同部分
假设我搜索“S”,那么结果应该如下所示,其中匹配的行应该是可见的,而不匹配的行应该被隐藏,并且“显示剩余”按钮应该是可见的。当我点击“显示剩余”按钮时,它应该显示同一部分的剩余行:
我如何实现这一点,如果可能,请提供上述场景的示例。
我已经为您的要求创建了代码,请找到下面的 url 下载代码并查看它。
链接:https://www.dropbox.com/s/22ijwgxybn98wyj/ExpandCollapse.zip?dl=0
Environment : Xcode 8 and Objective-C
突出显示我编写的代码。
我已经根据你的结构创建了student的NSObject,创建了两个(StudentListCell和ShowMoreCell)UITableViewCell
用于显示student的记录和“Show Remaining button”记录。
我还拿了两个(arrStudentInfo, arrSearchInfo) NSMutablebleArray
来保存搜索记录和原始记录。
之后我在ViewController.m
中初始化student的NSObject。请找到以下代码。
- (void)setupData {
self.arrStudentInfo = [[NSMutableArray alloc] init];
self.arrSearchInfo = [[NSMutableArray alloc] init];
StudentInfo *student_1 = [[StudentInfo alloc] init];
student_1.name = @"Sia S";
student_1.style = @"S";
student_1.trend = @"S";
student_1.age = @"60";
student_1.locale = @"Node";
student_1.street = @"BR";
student_1.city = @"JP";
student_1.country = @"US";
student_1.isOpen = YES;
student_1.isShowMore = NO;
[self.arrStudentInfo addObject:student_1];
StudentInfo *student_2 = [[StudentInfo alloc] init];
student_2.name = @"Nitin";
student_2.style = @"N";
student_2.trend = @"N";
student_2.age = @"40";
student_2.locale = @"Node";
student_2.street = @"BR";
student_2.city = @"SP";
student_2.country = @"US";
student_2.isOpen = YES;
student_2.isShowMore = NO;
[self.arrStudentInfo addObject:student_2];
}
我已经创建了返回当前事件的方法,这意味着搜索记录或数组的原始记录。
- (NSMutableArray *)getCurrentArray {
if(self.isSearch)
return self.arrSearchInfo;
else
return self.arrStudentInfo;
}
根据场景加载数据,
- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {
StudentInfo *studentInfo = [self getCurrentArray][indexPath.section];
if(indexPath.row == SHOW_MORE_INDEX && studentInfo.isShowMore == NO) {
static NSString *strCellIdentifier = @"ShowMoreCell";
ShowMoreCell *cell = [tableView dequeueReusableCellWithIdentifier:strCellIdentifier];
cell.btnShowMore.tag = indexPath.section;
[cell.btnShowMore addTarget:self actionselector(clickONShowMore forControlEvents:UIControlEventTouchUpInside];
return cell;
}
else {
static NSString *strCellIdentifier = @"StudentListCell";
StudentListCell *cell = [tableView dequeueReusableCellWithIdentifier:strCellIdentifier];
[cell setupCell:studentInfo indexPath:indexPath];
return cell;
}
}
用于搜索学生姓名,
- (void)searchBarSearchButtonClickedUISearchBar *)searchBar {
[searchBar resignFirstResponder];
self.isSearch = YES;
NSPredicate *predicateStudent = [NSPredicate predicateWithFormat:[NSString stringWithFormat"self.name CONTAINS[cd] '%@'",searchBar.text]];
NSArray *arrGetSearch = [self.arrStudentInfo filteredArrayUsingPredicate:predicateStudent];
if(self.arrSearchInfo.count)
[self.arrSearchInfo removeAllObjects];
[self.arrSearchInfo addObjectsFromArray:arrGetSearch];
[self.tblView reloadData];
}
如果用户单击 UISearchbar
上的“X”按钮,则再次加载原始记录。
- (void)searchBarUISearchBar *)searchBar textDidChangeNSString *)searchText {
if([searchText isEqualToString""] || searchText==nil) {
[searchBar resignFirstResponder];
self.isSearch = NO;
[self.tblView reloadData];
}
}
希望这对你有用。
关于ios - 具有行展开和折叠选项的表格 View 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40152516/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |