iOS Swift 4 - 在 tableview didSelectRowAt 上显示 Toast(或事件指示器)

标签 ios swift uitableview uiactivityindicatorview swift4

我正在使用 this answer 中的 ToastView 类,但我遇到了与事件指示器相同的问题。我在整个应用程序中都有 ToastViews,但如果它能正常工作,我会毫不犹豫地切换到指示器

我的应用程序有一个显示选项的表格 View 。选择一个选项后,需要加载很多关于该选项的信息,像这样

class TableController : UITableViewController
{
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        index = (indexPath as NSIndexPath).row
        super.performSegue(withIdentifier: "cellSelectedSegue", sender: self)
    }
}

class cellSelectionView : UIViewController
{
    override func viewDidLoad() {
        super.viewDidLoad()

        if let data = parser.getData(...){
            // data processing
        }
    }
}

我想让用户知道当他们选择一个单元格时正在进行加载操作。否则,一个单元格将被选中,呈现单元格选择的颜色,应用程序会在 segue 发生之前静止一秒钟。

为此,我尝试过

// In the tableview:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // Solution 1: ToastView.showInParent(parentView: self.view, text: "ayy lmao", duration: 1.0)
    // Solution 2: indicator.startAnimating()
   index = (indexPath as NSIndexPath).row
    super.performSegue(withIdentifier: "cellSelectedSegue", sender: self)
}

这两种解决方案都不起作用,因为在单元格选择 UI 事件完成之前不会触发 UI 事件,而在数据处理发生之前不会完成,这完全违背了这一点。我也试过将 UI 调用移动到 willSelectRowAt,没有任何区别。 我想知道如何让用户知道涉及 UI 事件的加载任务。

如果您想知道为什么我不在显示单元格之前进行数据处理而不是在选择时进行数据处理,那是因为每行的处理量很大。如果这样做,tableview 将需要很长时间才能显示

最佳答案

一些不同的选择 -

  1. 在推送 View 中,将 getData 方法放在 viewDidAppear 而不是 viewDidLoad 中。在 viewDidLoad 中完成所有操作之前, View 不会推送。然后您可以在推送的 View 上显示您的加载指示器。
  2. UIActivityIndi​​cator 放入单元格内,并根据保存单元格索引的变量(例如 indexLoading)显示/动画显示它。然后将 indexLoading 设置为按下的单元格行,并在该索引路径上调用 reloadRowsAtIndexPaths如果单元格的indexPath.row匹配indexLoading,显示指示器
  3. didSelectRow... 上发送将推送 View 的通知。从您的 TableView Controller 中收听该通知,并在您的 TableView 上显示加载指示器。

关于iOS Swift 4 - 在 tableview didSelectRowAt 上显示 Toast(或事件指示器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46476833/

相关文章:

ios - 我怎样才能更新我的字典 ios Swift 中的数量值

ios - 在 block 内调用方法并尝试重新加载数据崩溃

ios - presentViewController 给出错误

ios - 在 Swift 3 中使用表格单元格的值设置 UserDefaults

iphone - 如何锁定 UITableView 中的标题/标题

ios - Swift:使用 UIPageController 或屏幕边缘平移手势识别器导航 ViewController

ios - 如何将tableView的特定行单元格的图像设置为动态图像

iphone - 在 Storyboard中,如何在不单击按钮的情况下插入segue

iOS保存标签数据

swift - RxSwift 找不到 flatMapObservable