Я пытаюсь запустить поток в фоновом режиме, нажимая кнопку, расположенную на UITableViewCell
.
Теперь у меня есть метод, который вызывается при каждом нажатии кнопки и меняет значок.(от воспроизведения к паузе), а также выполняет другие действия.
Если поток завершается успешно (хотя вы можете остановить его с помощью кнопки на ячейке), эта кнопка должна вернуться от значка паузы к значку воспроизведения,чтобы показать, что поток завершен правильно.
Я попытался передать саму ячейку внутри другого потока, а затем отредактировать кнопку ячейки внутри dispatch_sync
.xCode здесь не выдает никаких ошибок, но значок кнопки не меняется.
Вот код:
-(void)thread:(NSDictionary*)taskAssets{
@autoreleasepool {
// Unpacking data
TaskObject *taskData = taskAssets[@"taskData"];
UILabel *statusLabel = taskAssets[@"statusLabel"];
CustomTaskCell *cell = taskAssets[@"cell"];
printf("Wow, this is the thread data: %s\n", [taskData.getTaskName UTF8String]);
sleep(10);
printf("Wow, the thread is done\n");
dispatch_sync(dispatch_get_main_queue(), ^{
[cell setSelected:FALSE];
[cell.button setImage:[UIImage imageNamed:@"playIcon"] forState:UIControlStateNormal];
statusLabel.text = @"Status: Finished";
});
}
}
Есть ли способ достичь этого?
Здесь работает смена значков (да, кнопка отправителя)
- (IBAction)runTask:(id)sender {
if ([sender isSelected]) {
[sender setImage:[UIImage imageNamed:@"playIcon"] forState:UIControlStateNormal];
[sender setSelected:NO];
[self updateStatus:@"Stopped"];
} else {
[sender setImage:[UIImage imageNamed:@"pauseIcon"] forState:UIControlStateSelected];
[sender setSelected:YES];
[self updateStatus:@"Running..."];
[self launchThread]; // This is where the thread starts...
}
}