Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检测UITableView何时已完成加载所有行?_Ios_Objective C_Swift_Uitableview - Fatal编程技术网

Ios 如何检测UITableView何时已完成加载所有行?

Ios 如何检测UITableView何时已完成加载所有行?,ios,objective-c,swift,uitableview,Ios,Objective C,Swift,Uitableview,我需要在UITableView完全加载后调用一个函数。我知道在大多数情况下,当您第一次加载视图时,并不是每一行都显示出来,但在我的情况下,它显示出来了,因为我总共只有8行 令人恼火的是,被调用的函数需要访问一些tableView数据,因此,在表完全加载之前,我不能调用它,否则我将得到一系列错误 在ViewDidDisplay中调用my函数会影响用户体验,因为该函数会更改UI。将它放在视图中似乎会破坏执行(我不知道为什么),将它放在viewDidLayoutSubviews中效果非常好,但由于每次

我需要在UITableView完全加载后调用一个函数。我知道在大多数情况下,当您第一次加载视图时,并不是每一行都显示出来,但在我的情况下,它显示出来了,因为我总共只有8行

令人恼火的是,被调用的函数需要访问一些tableView数据,因此,在表完全加载之前,我不能调用它,否则我将得到一系列错误

在ViewDidDisplay中调用my函数会影响用户体验,因为该函数会更改UI。将它放在视图中似乎会破坏执行(我不知道为什么),将它放在viewDidLayoutSubviews中效果非常好,但由于每次布局更改时都会调用它,我担心在重新加载tableView时可能会出现一些错误

在这个话题上,我几乎找不到什么帮助。尝试了一些我在这里发现的东西,但不幸的是它没有工作,因为它似乎有点过时。可能重复文章的解决方案不起作用,我在这里发布之前尝试过

感谢您的帮助!谢谢

编辑:我正在用一些数据填充我的tableView,我对此没有问题。我有两个部分,每4行。默认情况下,用户只看到5行(第一部分中有4行,第二部分中只有一行,其余部分隐藏)。当用户单击第一节的第一行时,将显示第二节的第一行。当他单击第一节的第二行时,会显示第二节的两行,依此类推。如果用户再次单击第一部分的第一行,则第二部分中仅显示一个单元格。然后他可以保留自己的选择

同时,系统会更改第一部分中选定行的颜色,以便用户知道该做什么

我这里的部分问题是我想更新数据库中的模型。如果用户想要修改记录,那么我需要将存储在数据库中的值与ViewController相关联。例如,如果他当时选择了选项2,我需要确保第一部分中的第二行具有不同的颜色,并且当他尝试访问视图时,第二部分中的两行显示出来

下面是一些代码:

    func setNonSelectedCellColor(indexPath: NSIndexPath) {
    let currentCell = tableView.cellForRowAtIndexPath(indexPath)
    currentCell?.textLabel?.textColor = UIColor.tintColor()

    for var nbr = 0; nbr <= 3; nbr++ {
        let aCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: nbr, inSection: 0))
        let aCellIndexPath = tableView.indexPathForCell(aCell!)
        if aCellIndexPath?.row != indexPath.row {
            aCell?.textLabel?.textColor = UIColor.blackColor()
        }
    }
}

func hideAndDisplayPriseCell(numberToDisplay: Int, hideStartIndex: Int) {
    for var x = 1; x < numberToDisplay; x++ {
        let priseCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: x, inSection: 1))
        priseCell?.hidden = false
    }
    if hideStartIndex != 0 {
        for var y = hideStartIndex; y <= 3; y++ {
            let yCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: y, inSection: 1))
            yCell?.hidden = true
        }
    }
}
我将这些值存储在字典中,以便在他保存时处理验证问题

我希望在我的tableView完成加载后立即调用前两个函数。例如,我无法在初始化第一行时要求数据源显示/隐藏1行或多行,因为这些行尚未创建


正如我所说的,如果在ViewDidDisplay中调用这些函数,那么这几乎可以达到预期效果,因为它不会立即选择行,也不会尽快在第二部分中显示适当的行数。我必须等待1-2秒才能完成。如果您已经拥有用于填充tableView的数据,那么您不能在函数中使用该数据本身吗?我假设数据是以对象数组的形式显示在表视图中。因此,您已经可以访问该数据,并且可以在函数中使用它

但如果情况并非如此,并且如果表视图只有8行,则可以尝试实现此函数,并在其中检查indexPath.row==7(第8行,即最后一行)

tableView(tableView:UITableView,didendisplayingcell:UITableViewCell,forRowAtIndexPath:nsindepath)


由于您的所有行在一个屏幕上都是可见的,无需滚动,因此您可以使用此函数确定所有单元格都已加载,然后调用您的函数。

您能提供更多信息说明错误是什么吗?另外,可能有一些相关的代码?看不出这样做的原因。初始化表格单元格时,您应该已经知道所需的所有数据。这不是重复数据。我试过上面的方法,但效果不太好。再重复一次:我试过这种方法,它根本不适合我想做的事情。如果调用其中一个函数,我会得到一个
致命错误:在展开可选值时意外发现nil
,因为调用与tableView相关的任何内容时都返回nil。例如,
let aCell=tableView.cellforrowatinexpath(nsindepath(forRow:nbr,instation:0))
返回nil,即使它已经创建,我也不知道为什么是nil。您不需要知道表何时显示,用户与表行的交互应导致您更新表显示。相应地更新数据模型,并调用表更新函数,如
reloadRowsAtIndexPaths
reloadSections
。您可以在
cellforrowatinexpath
中处理单元格的格式设置。不要循环遍历单元格并直接更新它们。不要设置隐藏属性;为
numberOfRowsInSection
返回适当的值,我不会调用它。根据文档,此委托用于检测何时从tableView中删除了一行。如果仅使用自定义数据源,则DiEndDisplaying是tableView委托集合tableView.delegate中的一个方法,用于调用它
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let path = (indexPath.section, indexPath.row)
    switch path {
    case(0,0):
        setNonSelectedCellColor(indexPath)
        hideAndDisplayPriseCell(1, hideStartIndex: 1)
        data["frequencyType"] = Medecine.Frequency.OneTime.rawValue
    case(0,1):
        setNonSelectedCellColor(indexPath)
        hideAndDisplayPriseCell(2, hideStartIndex: 2)
        data["frequencyType"] = Medecine.Frequency.TwoTime.rawValue
    case(0,2):
        setNonSelectedCellColor(indexPath)
        hideAndDisplayPriseCell(3, hideStartIndex: 3)
        data["frequencyType"] = Medecine.Frequency.ThreeTime.rawValue
    case(0,3):
        setNonSelectedCellColor(indexPath)
        hideAndDisplayPriseCell(4, hideStartIndex: 0)
        data["frequencyType"] = Medecine.Frequency.FourTime.rawValue

    default:break
    }

}