一旦用户使用swift单击表视图中的一个单元格,如何运行计时器?

时间:2017-07-22 15:38:01

标签: ios swift uitableview timer

我的UI中有两个视图控制器,我打算做的是当用户点击表格视图中的一个单元格时,会弹出一个弹出窗口(另一个视图控制器)带有一个计时器< / p>

然而,当我构建应用程序并单击其中一个单元格时,标签仍然显示标签并且不会倒计时

我也收到一条错误消息,说明发现的Unicode卷曲引号替换为&#34;&#34;并且在同一行中的整数文字前缀之后的预期数字(我指出它在下面的哪一行)

此类用于具有表视图的视图控制器

btn.innerHTML = "This is a button name";

此类适用于PopUpViewController

 public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return(redeem.count)
    }


    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {

//bringing down the array to print

        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        cell.textLabel?.text = redeem[indexPath.row]

        return(cell)
    }


    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {


        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPopUpID") as! PopUpViewController

        self.addChildViewController(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMove(toParentViewController: self)


    }   

2 个答案:

答案 0 :(得分:0)

  1. 我没有看到对runTimer的任何电话。所以计时器永远不会启动。我建议使用viewWillAppearviewDidAppear。将其添加到PopupViewController:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        runTimer()
    }
    
  2. 您只需调用self.view.removeFromSuperview()来关闭弹出窗口,这会从视图层次结构中删除视图,但viewController仍会注册为子视图控制器。我建议使用presentViewController展示弹出窗口,然后使用dismissViewControllerAnimated将其删除。

  3. 呈现视图控制器:

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
        {
            let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPopUpID") as! PopUpViewController
    
            self.present(popOverVC, animated: true, completion: nil)
        }
    

    解雇它:

        @IBAction func closePopUp(_ sender: Any)
        {
            self.dismiss(animated: true, completion: nil)
        }
    
    1. 您使用了错误的引号(“而不是”),因此错误。

答案 1 :(得分:0)

需要基本代码。请记住,您需要确保无论何时制作新的计时器以确保在现有计时器上调用invalidate(),否则您将生成您可能不想要的多个计时器。

class myClass: UIViewController {
    //...
    var timer:Timer!
    //...
    func createTimer(interval: TimeInterval, selector: Selector) {
        if timer == nil {
            timer = Timer.scheduledTimer(timeInterval: interval, target: self, selector: selector , userInfo: nil, repeats: true)
        }
    }
    //...
    func cancelTimer() {
        timer.invalidate()
        timer = nil
    }
    //...
    override func viewWillDisappear(_ animated: Bool) {
        cancelTimer()
    }
}