Как переключиться на другой контроллер представления, если обновлено какое-либо значение в строке таблицы? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть табличное представление в одном контроллере представления, оно содержит массив элементов типа, поэтому всякий раз, когда какое-либо свойство, например, точность маяка (показано ниже), элемента обновляется (постоянно обновляется), я хочу иметь возможность переключатьсяв другой вид контроллера.Но я не знаю, какой метод делегата tableview я должен использовать для этого.

Я попытался сделать это с помощью метода didSelectRowAt, и это работает, но я хочу иметь возможность перехода без выбора, только когда точность дляЭлемент меньше некоторого значения для определенного элемента, который я хочу иметь возможность перехода.

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 или какой-то другой способ, где у меня нетна самом деле выбрать строку, но он все еще выполняет выше.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Вы можете вызвать функцию с таймером следующим образом:

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
                }
            }
    }
}

Здесь подсчет обновлений будет вызываться каждую минуту, и в этой функции, и если точность ниже, будет представлен второй контроллер.

Продолжительность таймера, который вы можете выбрать, который подходит вам лучше всего, и если вы получаете какое-либо событие или делегата для изменения точности, вы можете также представить там второй контроллер вида.

Надеюсь, это поможет.

0 голосов
/ 16 мая 2019

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)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...