我在启用/禁用 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 参数获得的按钮确实存在(它不为空)。当我删除 button.enabled = YES;
时,它会保持禁用状态。有没有办法在我的异步代码执行后再次启用它,而不在异步执行期间仍然启用按钮?
预先感谢您对我的帮助。
最佳答案
经过大量搜索,我找到了问题的答案。因为我没有在主线程上运行所有 UIView 函数,所以即使我的函数完成,UI 也不会更新。因此,即使我的覆盖 UIView 和 UIActivityIndicator 尚未从屏幕上删除,该按钮也会禁用很短的时间,然后再次启用。
我希望这可以帮助其他遇到类似问题的人。
关于objective-c - UIButton 禁用后仍然调用 IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327825/