Обновления пользовательского интерфейса WatchOS2 отправляются на WKInterfaceController на основе страницы, когда контроллер не является текущей, страница запускается, но не обновляет какие-либо пользовательские интерфейсы

У меня есть приложение с 3 страницами, когда я получаю информацию от своего делегата WatchConnectivity, который является моим делегатом расширения, я делегирую его InterfacController для обновления пользовательского интерфейса.

Однако код, обрабатывающий обновление, запускается, включая обновление пользовательского интерфейса, но пользовательский интерфейс фактически не обновляется.

Похоже, вы можете обновить пользовательский интерфейс interfaceController только тогда, когда это текущая страница.

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

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


person Jacky Wang    schedule 25.10.2015    source источник


Ответы (1)


Не нравится iOS UIKit. Все WKInterfaceObject не являются объектами пользовательского интерфейса. Они просто что-то вроде пульта дистанционного управления для удаленного пользовательского интерфейса. (Вы знаете, что пакет содержит раскадровку, а пакет содержит отдельные расширения, в концепции песочницы вы не можете напрямую получить доступ к объектам пользовательского интерфейса.)

Соединение между WKInterfaceObjects и фактическими объектами пользовательского интерфейса устанавливается, только подключенный пользовательский интерфейс активен. В противном случае любые запросы, отправленные через WKInterfaceObjects, игнорируются.

Сделайте лайки ниже:

-(void) willActivate {
    _active = YES;
    [super willActivate];
    if(_needsUpdate){
        [self refresh];
    }
}

-(void) willDeactivate {
    _active = NO;
    [super willDeactivate];
}

// make it to be called when the data changes
-(void) dataDidChange:(NSNotification)* note {
    // If active, refresh UI, otherwise flag it. 
    // It will be handled in next activation.
    if(_active)
        [self refresh];
    else
        _needsUpdate = YES;
}

-(void) refresh {
    __needsUpdate = NO;

    // Update your UI here.
}
person jeeeyul    schedule 29.10.2015