Изменить цвет строки программно в WatchKit
Я хотел бы изменить цвет строки в WKInterfaceTable, если он был выбран. Я сделал эти шаги, но не знаю, как я могу пойти дальше:
override func table(table: WKInterfaceTable, didSelectRowAtIndex rowIndex: Int) {
let row = tableView.rowControllerAtIndex(rowIndex) as! TableRowObject
}
Я надеюсь, что кто-то из вас, ребята, может помочь мне сделать это.
4 ответа
Вы можете изменить цвет в соответствии с выбором строки,
Создайте 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]];
}
}
Вы можете сделать это, добавив WKInterfaceGroup
к вашему контроллеру строк. Сделайте ширину и высоту группы "относительно контейнера" размером 1. Это гарантирует, что группа полностью заполняет ваш ряд. Затем вы можете установить цвет фона, используя setBackgroundColor: метод на WKInterfaceGroup
, Добавьте все остальные элементы управления в этой новой группе.
@property (weak, nonatomic) IBOutlet WKInterfaceGroup *groupCellContainer;
Create above property in your custom cell for the Group in your cell and connect it with watch interface storyboard.
Add below code in your didSelectRowAtIndex method, this code will set Red background color to selected cell & set Gray color to other cells.
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex {
for (int row=0; row < Array.count; row++) {
CustomCell *customCell = [table rowControllerAtIndex:row];
if (rowIndex == row) {
[customCell.groupCellContainer setBackgroundColor:[UIColor redColor]];
} else {
[customCell.groupCellContainer setBackgroundColor:[UIColor grayColor]];
}
}
}
Я думаю, что вы должны установить цвета фона в раскадровке.
Высоко теоретический, никогда не делал этого сам
Если у вас есть более динамичное приложение, вы можете создать две строки прототипа и присвоить им идентификаторы (Normal, Highlighted). Тогда используйте insertRowsAtIndexes(_:)
а также removeRowsAtIndexes(_:)
"переключить" строку на выделенную...
Не лучшее решение, но единственное, что приходит на ум, когда WatchKit все еще очень ограничен.