我的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)
}
答案 0 :(得分:0)
我没有看到对runTimer
的任何电话。所以计时器永远不会启动。我建议使用viewWillAppear
或viewDidAppear
。将其添加到PopupViewController:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
runTimer()
}
您只需调用self.view.removeFromSuperview()
来关闭弹出窗口,这会从视图层次结构中删除视图,但viewController仍会注册为子视图控制器。我建议使用presentViewController
展示弹出窗口,然后使用dismissViewControllerAnimated
将其删除。
呈现视图控制器:
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 :(得分: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()
}
}