Изменить цвет строки программно в WatchKit

Я хотел бы изменить цвет строки в WKInterfaceTable, если он был выбран. Я сделал эти шаги, но не знаю, как я могу пойти дальше:

override func table(table: WKInterfaceTable, didSelectRowAtIndex rowIndex: Int) {

    let row = tableView.rowControllerAtIndex(rowIndex) as! TableRowObject

}

Я надеюсь, что кто-то из вас, ребята, может помочь мне сделать это.


person horst    schedule 30.05.2015    source источник


Ответы (3)


Вы можете изменить цвет в соответствии с выбором строки,

Создайте IBOutlet WKInterfaceGroup в rowController и установите для него Storyboard с DefaultGroup, который создается при перетаскивании таблицы в раскадровку (не нужно добавлять новую WKInterfaceGroup).

@property (weak, nonatomic) IBOutlet WKInterfaceGroup *rowGroup;

Создайте свойство BOOL для отслеживания статуса выбора в rowController.

@property (nonatomic, readwrite) BOOL isSelected;

Добавьте это в didSelectRow,

- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex {

    TableRowObject *row = [self.interfaceTable rowControllerAtIndex:rowIndex];

    if (row.isSelected) {
        row.isSelected = NO;
        [row.rowGroup setBackgroundColor:[UIColor clearColor]];
    }
    else {
        row.isSelected = YES;
        [row.rowGroup setBackgroundColor:[UIColor blueColor]];
    }
}
person Dhaval Panchal    schedule 02.06.2015
comment
Большое спасибо за ответ! Мне очень нравится помечать его как правильный, но можно ли перевести его на быстрый? - person horst; 03.06.2015
comment
Это просто простой метод didSelectRowAtIndex и циклы if-else, поэтому вы можете преобразовать их в быстрые. - person Dhaval Panchal; 04.06.2015
comment
Это больше не работает. Xcode предоставит вам недопустимую конфигурацию. Выход rowGroup из MultiPickerInterfaceController в WKInterfaceGroup недействителен. Розетки не могут быть подключены к повторяющемуся контенту. - person BlueskyMed; 26.01.2019
comment
@BlueskyMed У меня была такая же ошибка. Я удалил выходы, связанные с rowGroup, и очистил свой проект. Снова добавил розетки и все заработало. Я считаю, что триггером было то, что я разместил свою розетку в нескольких местах, хотя я удалил одну, она продолжала вызывать ошибку. - person Mark; 05.03.2020

Вы можете сделать это, добавив WKInterfaceGroup в свой контроллер строк. Сделайте ширину и высоту группы «относительно контейнера» размером 1. Это гарантирует, что группа полностью заполнит вашу строку. Затем вы можете установить цвет фона с помощью setBackgroundColor: для WKInterfaceGroup. Добавьте все остальные элементы управления в эту новую группу.

person Mike Swanson    schedule 30.05.2015

Я думаю, вам нужно установить цвета фона в раскадровке.

Очень теоретически, никогда не делал этого сам:

Если у вас более динамичное приложение, вы потенциально можете создать две строки прототипа и присвоить им идентификаторы (обычный, выделенный). Затем используйте insertRowsAtIndexes(_:) и removeRowsAtIndexes(_:), чтобы «переключить» строку на выделенную...

Не лучшее решение, но единственное, что приходит на ум, поскольку WatchKit все еще очень ограничен.

person Mikael Hellman    schedule 30.05.2015