我在一个视图控制器中有一个表格视图,其中包含一列类型项,因此每当某个属性的某些属性(如信标精度(如下所示))被更新(不断更新)时,我都希望能够进行切换到另一个视图控制器。但是我不知道应该为此使用哪种tableview委托方法。
我尝试使用didSelectRowAt方法做到这一点,并且可以,但是我希望能够在不进行选择的情况下进行转换,只是当某个项目的精度小于我希望能够转换的特定项目的某个值时。 / p>
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = items[indexPath.row]
let beac = item.beacon
let acc = Double(beac!.accuracy)
if acc < 3.00 {
if let Level2 = self.storyboard!.instantiateViewController(withIdentifier: "ReportVC") as? UIViewController {
self.present(Level2, animated: true, completion: nil)
}
}
}
这行得通!
但是需要一个tableview委托方法或其他不需要我实际选择一行的方法,但是它仍然可以执行上面的操作。
答案 0 :(得分:1)
您可以使用这样的计时器来调用函数:
var timer = NSTimer()
override func viewDidLoad() {
scheduledTimerWithTimeInterval()
}
func scheduledTimerWithTimeInterval(){
// Scheduling timer to Call the function "updateCounting" with the interval of 60 seconds
timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: Selector("updateCounting"), userInfo: nil, repeats: true)
}
func updateCounting(){
for item in items {
let beac = item.beacon
let acc = Double(beac!.accuracy)
if acc < 3.00 {
if let Level2 = self.storyboard!.instantiateViewController(withIdentifier: "ReportVC") as? UIViewController {
self.present(Level2, animated: true, completion: nil)
break
}
}
}
}
在此功能中,每分钟都会调用一次更新计数,如果精度较低,则会显示第二个控制器。
您可以确定最适合您的计时器持续时间,如果遇到一些事件或委托进行准确性更改,则还可以在那里显示第二个视图控制器。
希望这会有所帮助。
答案 1 :(得分:0)
didSet
属性观察器用于在刚刚设置或更改属性时执行一些代码。
为数组didSet
添加一个属性观察器items
,并检查其准确性。如果任何信标的精度低于3.00,则可以显示另一个视图控制器
var items: [CLBeacon] = [] {
didSet {
if items.contains(where: { $0.accuracy < 3.00 }) {
if let reportVC = self.storyboard?.instantiateViewController(withIdentifier: "ReportVC") {
self.present(reportVC, animated: true, completion: nil)
}
}
}
}
如果您要将精度低于3.0的特定信标传递给新的视图控制器,请尝试此操作
var items: [CLBeacon] = [] {
didSet {
if let beacon = items.first(where: { $0.accuracy < 3.00 }) {
if let reportVC = self.storyboard?.instantiateViewController(withIdentifier: "ReportVC") {
reportVC.selectedBeacon = beacon
self.present(reportVC, animated: true, completion: nil)
}
}
}
}