我在启用/禁用UIButton时出现问题,如果我稍后在我的代码中没有再次启用它,则禁用该按钮会正常工作。当我稍后启用它时,它会显示为已禁用(不透明度会发生变化)但是当我按下它时仍会调用附加的IBAction函数。
代码:
- (void)loadDataFromURL:(NSURL *)URL withLoadIndicator:(UIActivityIndicatorView *)loadIndicator errorName:(NSString *)name sender:(id)sender andCallback:(SEL)selector{
// Start loading indicator, block button so we will have only one call at a time
[loadIndicator startAnimating];
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = sender;
[button setEnabled:NO];
}
// Run the data load sequence
self.dispatchQueue = dispatch_queue_create("com.companyname.settingsqueue", 0);
dispatch_async(self.dispatchQueue, ^{
// Downloading JSON and using CoreData to put it into the sqlite database here
});
// After loading is complete stop animating and re-enable the button
dispatch_async(dispatchQueue, ^{
[loadIndicator stopAnimating];
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = sender;
button.enabled = YES;
}
});
}
奇怪的是它适用于loadIndicator。我从函数中的sender参数获得的按钮确实存在(它不是null)。当我删除button.enabled = YES;
时,它会保持禁用状态。有没有办法在异步代码执行后再次启用它,而在异步执行期间仍未启用按钮?
先谢谢你的帮助。
答案 0 :(得分:2)
经过广泛搜索后,我找到了问题的答案。因为我没有在主线程上运行我的所有UIView函数,所以即使我的函数完成,UI也没有更新。因此,即使我的覆盖UIView和UIActivityIndicator尚未从屏幕上删除,按钮也会在很短的时间内被禁用然后再次启用。
我希望这可以帮助其他有类似问题的人。