从另一个线程更改按钮图标/切换按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从另一个线程更改按钮图标/切换按钮相关的知识,希望对你有一定的参考价值。
我试图通过按下放在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...
}
}
答案
我可以看到你的电话
[self launchThread];
发件人/单元格如何在您拥有的词典中结束
-(void)thread:(NSDictionary*)taskAssets
我不完全了解@autoreleasepool
的作用,但也许您可以尝试以下方法:
-(void)thread:(NSDictionary*)taskAssets{
@autoreleasepool {
// Unpacking data
__block TaskObject *taskData = taskAssets[@"taskData"];
__block UILabel *statusLabel = taskAssets[@"statusLabel"];
__block 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";
});
}
}
以上是关于从另一个线程更改按钮图标/切换按钮的主要内容,如果未能解决你的问题,请参考以下文章