在向单元格提供外部数据时滚动浏览表格视图时出现问题

时间:2018-10-11 20:26:58

标签: ios swift uitableview uikit

我正在尝试在应用内重新创建浏览器。我创建了一个部分,用户可以在其中添加他/她喜欢的网站,以便可以在表格视图中显示它们。我正在使用第三方api来获取并显示所选网站的标题,描述和收藏夹图标。这就是它的工作方式。有两个视图控制器,第一个是浏览器本身,另一个是用户喜欢的表视图控制器,用户可以在其中查看其喜欢的网站。当用户在第一个视图控制器中点击“ +”号时,当前网址将使用UserDefaults保存在数组中(我在使用Codable保存时遇到了一些问题),然后在第二个视图控制器中,将表格视图填充到了用户已保存的每个URL的for循环。

问题如下:

当用户已经添加了各种网站时,它必须滚动查找所有他/她保存的内容。但是,每个tableview单元都会被回收,因此每次用户上下滚动时,它都会再次加载。

这是用户首次打开收藏夹区域的时间 This is when the user first opens the favourite section

用户滚动时

When the user scrolls

当用户向上滚动到据称已加载的表格视图单元格时 When the user scrolls up to a tableview cell that allegedly already loaded up

使用的两个数组如下:

var modifiedURLS = defaults.object(forKey: "modifiedURLS") as! [String]

var nonModifiedURLS = defaults.object(forKey: "nonModifiedURLS") as! [String]

我正在使用两个数组,因为我正在使用的api(SwiftLinkPreview)仅在所请求的URL为正常URL时才起作用(.com之后没有其他内容) 因此,我要保存一个修改后的网址以使用此api访问Title,description和favicon属性,并保存一个nonModified网址,该网址完全存储用户要保存的网址

填充tableviewcontroller时的代码如下:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "favoritesCell", for: indexPath) as! BookmarkTableViewCell

    let slp = SwiftLinkPreview(session: .shared, workQueue: SwiftLinkPreview.defaultWorkQueue, responseQueue: DispatchQueue.main, cache: DisabledCache.instance)

    cell.titleWebLabel.text = "Loading title..."
    cell.descriptionWebLabel.text = "Loading description..."
    cell.urlLabel.text = nonModifiedURLS[indexPath.row]

    for _ in 0...modifiedURLS.count - 1 {
        // The following is an asynchronous request
        slp.preview(modifiedURLS[indexPath.row], onSuccess: { result in
            let titleIndex = result.index(forKey: SwiftLinkResponseKey.title) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let title:String = result[titleIndex].value as! String
            cell.titleWebLabel.text = title

            let descriptionIndex = result.index(forKey: SwiftLinkResponseKey.description) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let description:String = result[descriptionIndex].value as! String

            cell.descriptionWebLabel.text = description

            let favIconIndex = result.index(forKey: SwiftLinkResponseKey.image) as! Dictionary<SwiftLinkResponseKey, Any>.Index
            let favIcon = result[favIconIndex].value
            cell.favIconImageView.sd_setImage(with: URL(string: "\(favIcon as! String)"))
        },
             onError: { error in print("\(error)")})
    }

    return cell
}

可以在以下GitHub链接中找到该项目:https://github.com/francisc112/IssueBrowser

0 个答案:

没有答案