更新表时,SWIFT deselectRowAtIndex非常慢

时间:2014-06-05 02:57:56

标签: ios uitableview swift

我不确定这是否与SWIFT或某些bug有关,但我曾经能够在目标c中调用它来放大和缩小tableview单元格:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if([indexPath isEqual:[tableView indexPathForSelectedRow]])  {
    return 500.0;
}

return 81.0; 
}

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

if (isShowingDetails == YES) {

isShowDetails = NO;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView beginUpdates];
[tableView endUpdates];

 }else {

    isShowingDetails = YES;
    [tableView beginUpdates];
    [tableView endUpdates];


}
}

但是现在如果我尝试使用这个SWIFT版本来做,当取消选择该行时,它会有几秒钟的非常糟糕的延迟..继续SWIFT版本:

  override func tableView(tableView: UITableView!,
        heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {

            if(indexPath.isEqual(tableView.indexPathForSelectedRow()))  {
                return 500.0;


            }
            return 81.0;

    }

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

        if(isExpanded == true)
        {

             isExpanded = false
            self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
            self.tableView.beginUpdates()
            self.tableView.endUpdates()


        } else {
           isExpanded = true
            self.tableView.beginUpdates()
            self.tableView.endUpdates()




        }
    }

有什么想法吗?正如我所说,我不确定它是否按照我写的方式,但我不明白为什么我在目标C中从未遇到任何问题。 它在第一次选择它时在SWIFT中工作正常,只是延迟更新真的很痛苦。

2 个答案:

答案 0 :(得分:1)

iOS 8中的表视图现在可以让它们的单元格声明它们自己的高度,而不是需要在委托方法中实现它们。如果您能够这样做,您可能希望看一下这样做,因为这将是一种更清洁的方式来做您在此尝试做的事情。

否则,您是否已在iOS 8中对Objective-C代码进行基准测试,以确保UIKit框架本身的性能不受影响? Swift仍在调用底层框架,而这正是大部分工作发生的地方。如果Objective-C和Swift实现在iOS 8上看起来同样慢,那么你知道UITableView方法本身存在问题,你可以提出针对它们的bug。如果它只是Swift,你知道它是Swift / UIKit / Objective-C桥接的一个错误,并且可以提出错误。

答案 1 :(得分:0)

我有同样的问题。更新到ios 8.后我的tableview变得缓慢。我有一个基于tabbar的应用程序。 App有2个标签,都包含tableview。第一个选项卡上的Tableview控制器有大约350个单元格,第二个选项卡包含大约40个。所以当我从tab2切换到tab1时,我会得到2秒的巨大延迟。但是当我从tab1切换到tab2时,它会更快,因为tab2上的tableview具有相对较少的单元格。 但我的问题是,当我在任何ios6或ios7设备中运行相同的代码相同的应用程序。它更快,即使没有可追踪的延迟。并且在ios 8中,didselect也很慢,tableview使得整个viewcontroller超级慢。我到处都是,我得到了延迟。 App虽然在ios7上运行得非常流畅。