OStack程序员社区-中国程序员成长平台

标题: ios - 具有行展开和折叠选项的表格 View 的最佳方法 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 14:18
标题: ios - 具有行展开和折叠选项的表格 View 的最佳方法

我有包含表格 View 和搜索栏的 View 。当我开始搜索时,它应该搜索 tableview。下面是附图中tableview的示例数据:enter image description here

STUDENT 1、STUDENT 2 是表中的不同部分

假设我搜索“S”,那么结果应该如下所示,其中匹配的行应该是可见的,而不匹配的行应该被隐藏,并且“显示剩余”按钮应该是可见的。当我点击“显示剩余”按钮时,它应该显示同一部分的剩余行:

enter image description here

我如何实现这一点,如果可能,请提供上述场景的示例。



Best Answer-推荐答案


我已经为您的要求创建了代码,请找到下面的 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4