設定 button.enabled = NO 時,自訂圖片的 UIButton 不會自動變暗 (預設系統行為會對圖片套用灰階/透明度)。
UIButton 預設的 adjustsImageWhenDisabled 僅對**系統繪製**內容 (如文字、系統圖示) 生效,對 setImage:forState: 設定的自訂圖片**不自動處理**。
// 方法 1:直接用正常狀態圖片作為 disabled 圖片 (不變暗)
UIImage *normalImage = [button imageForState:UIControlStateNormal];
[button setImage:normalImage forState:UIControlStateDisabled];
// 方法 2:提供專門的 disabled 圖片 (灰階版)
[button setImage:[UIImage imageNamed:@"btn_normal"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"btn_disabled"] forState:UIControlStateDisabled];
@interface CustomButton : UIButton
@end
@implementation CustomButton
- (void)setEnabled:(BOOL)enabled {
[super setEnabled:enabled];
// 手動控制 alpha 模擬變暗效果
self.imageView.alpha = enabled ? 1.0 : 0.5;
// 或套用濾鏡 (iOS 13+)
// if (@available(iOS 13.0, *)) { ... }
}
@end
// 設定圖片為 Template 模式,可跟隨 tintColor 自動變色
UIImage *img = [UIImage imageNamed:@"btn_icon"];
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[button setImage:img forState:UIControlStateNormal];
// 設定按鈕 tintColor,disabled 時會自動變為灰色
button.tintColor = [UIColor blueColor]; // 正常藍色
// disabled 時系統自動將 tintColor 變為灰色 (需 button.adjustsImageWhenDisabled = YES)
| 屬性/方法 | 作用 | 對自訂圖片影響 |
|---|---|---|
adjustsImageWhenDisabled | 啟用/停用時自動調整圖片外觀 | **僅對系統繪製內容生效**,自訂圖片無效 |
setImage:forState: | 為特定狀態設定圖片 | 需手動提供 Normal/Highlighted/Disabled/Selected 圖片 |
imageView.alpha | 直接控制圖片透明度 | 立即生效,可在 setEnabled: 中動態調整 |
tintColor + UIImageRenderingModeAlwaysTemplate | 圖片作為模板,跟隨 tintColor 著色 | disabled 時 tintColor 自動變灰,圖片跟著變灰 |
setImage:forState:AlwaysTemplate + tintColor,自動適配深色模式、啟用狀態