【问题标题】:Obj-C - Expand selected cell, collapse when unselectedObj-C - 展开选定的单元格,取消选中时折叠
【发布时间】:2018-07-31 22:31:07
【问题描述】:

我正在尝试这样当我的用户点击一个单元格时,它会从高度 70 扩展到 165,当他们选择另一个单元格时,我希望之前选择的单元格折叠,而新选择的单元格展开。看起来应该很简单,但是当我使用下面的代码时,某些单元格有时会保持扩展,导致事情重叠?我该如何解决这个问题?

注意:我的 tableviewcell xib 是 165h(因为我想在单元格展开时显示的数据位于它的下半部分)

ViewController.m

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        if([indexPath isEqual:[tableView indexPathForSelectedRow]]) {

            return 165.0;

        }

        return 70.0;

    }

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    [tableView beginUpdates];
    [tableView endUpdates];


}

【问题讨论】:

    标签: ios objective-c uitableview


    【解决方案1】:
    @interface tableView (){
    
        NSInteger value;
    
    }
    
    @property(weak, nonatomic) NSIndexPath *selectedIndexPath;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    
        value = 0;
    }
    
    
    
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
        if(value == 1){
            value = 0;
    
        }
        else{
            value = 1;
        }
        [self.tableView beginUpdates];
        _selectedIndexPath = indexPath;
        [self.tableView endUpdates];
    
    
    }
    
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
        if (indexPath == _selectedIndexPath && value == 1) {
    
            return 285;
        }
        else{
            return 120;
        }
        return 120;
    
    }
    

    希望有帮助!

    【讨论】:

    • 如果我的 xib 也设置为 70h,这将非常有效。也就是说,如果我希望标签出现在下拉部分中,我无法将我的 xib 设置为 165h 以使其正常工作。这对我来说没有意义,因为我应该如何在下拉列表的下半部分放置任何东西?
    • 好吧,您需要在 xib 中获取单元格高度 = 165 并完成所有设计工作。在代码中,更改IMET 120 - > 70和285 - > 165.当代码运行时,它将将单元格的高度返回为70,但选择单元格时,它将返回高度为165 span>
    • 试过了 - 出于某种原因,当我按照您上面所说的方式进行操作时(xib 在 165),即使没有选择它们,也会在 165 处返回一些选定的单元格:/
    • 嗯,这很奇怪,但它发生并且确实发生在我身上,我需要看到你的代码。如果方便,您可以将文件邮寄至 Hemant.garg@appcodeindia.com,或者您可以提供您的电子邮件 ID,我将向您发送一个虚拟项目
    【解决方案2】:

    声明一个属性

    @property NSIndexPath*index;
    

    //

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if(indexPath == self.index) {
            return 165.0;
        }
        return 70.0;
    }
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
          self.index = indexPath;
          [tableView reloadData];
    }
    

    //

    查看Demo

    【讨论】:

    • 当我实现这个并打开我的表格视图时,我的 4 个单元格中的两个已经展开了?当我最终将它们全部关闭时,由于某种原因,我的最后一个牢房一直在扩大......
    • 您可能遗漏了一些东西,请查看使用相同代码的附加演示
    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2012-04-24
    • 2019-04-23
    • 2016-12-23
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多