Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当UIAlertController覆盖屏幕时,自动禁用自定义类型的UIButton_Ios_Objective C_Swift_Uibutton - Fatal编程技术网

Ios 当UIAlertController覆盖屏幕时,自动禁用自定义类型的UIButton

Ios 当UIAlertController覆盖屏幕时,自动禁用自定义类型的UIButton,ios,objective-c,swift,uibutton,Ios,Objective C,Swift,Uibutton,我有一个UIViewController包含多个UIButton,类型为custom。如果我的视图失去了焦点,比如显示了一个新的视图控制器,或者在它上面添加了其他视图,我如何自动灰显(禁用)自定义按钮 基本上,我想灰色的按钮,不能接收触摸,所以用户的重点是在屏幕上的互动元素 我没有在系统中使用按钮类型,因为我想为按钮图像设置非单色图像 如果您希望按钮不可触摸,可以使用 button.enabled=false; button.userInteractionEnabled=false 在展示UI

我有一个
UIViewController
包含多个
UIButton
,类型为
custom
。如果我的视图失去了焦点,比如显示了一个新的视图控制器,或者在它上面添加了其他视图,我如何自动灰显(禁用)自定义按钮

基本上,我想灰色的按钮,不能接收触摸,所以用户的重点是在屏幕上的互动元素

我没有在系统中使用按钮类型,因为我想为按钮图像设置非单色图像


如果您希望按钮不可触摸,可以使用

button.enabled=false;
button.userInteractionEnabled=false

在展示UIAlertViewController和

button.enabled=true;
button.userInteractionEnabled=true

在显示UIAlertViewController之后

如果你想改变按钮的颜色,也可以使用

    [btn setBackgroundImage:[UIImage imageNamed:@"your gray image"] forState:UIControlStateSelected];

[btn setBackgroundImage:[UIImage ImageName:@“您的灰色图像”]forState:UIControlStateHighlighted]


根据您的选择,您可以使用以下代码

NSArray *subviews = [self.view subviews];
for (UIView *v in subviews) {
    if ([v isKindOfClass:[UIButton class]]) 
    {
        UIButton *button = (UIButton *) v;
        [button setEnabled:NO];
        [button setAlpha:0.5];
    }
}
此代码将禁用当前视图中的所有UIButton。当Alertview关闭时,您可以重新启用按钮


希望这有帮助

当显示
UIAlertController
时,这会改变窗口的色调。这就是非自定义按钮变暗的原因。这些正常和暗显颜色取自
tintColor
属性。对于自定义按钮,您可以覆盖
tintColorDidChange
方法:

class CustomButton: UIButton {

    override func tintColorDidChange() {
        if tintAdjustmentMode == .dimmed {
            // modify subviews to look disabled
        } else {
            // modify subviews to look enabled
        }   
    }

}
但在你的情况下,你的图像看起来只有一种颜色。这就是为什么你可以简化它。只需使用渲染模式加载按钮的图像
UIImageRenderingMode.alwaysTemplate
,并将按钮的
tintColor
更改为与图像的颜色相同。然后一切都会自动发生

在Xcode的帮助下,可以在模板模式下渲染图像


或者通过编程方式从原始图像获取它。使用RenderingMode(.alwaysTemplate)

请显示一些代码或屏幕截图。除非您正在寻找其他类型的解决方案,在显示警报之前,您应该能够将按钮设置为
button.userInteractionEnabled=false
。重叠的viewController使整个背景变灰还不够吗?请尝试此按钮。isEnabled=false@zisoft对但对于在顶部创建并添加子视图的情况,这会使底部视图无响应,我不想让这些按钮给人一种可点击的印象。我必须对屏幕上的每个自定义按钮以及视图无响应的每种情况都这样做,为了保持一致,我必须在我要编写的每个视图控制器中这样做。我在这里寻找更多的通用解决方案。感谢您的提示:当UIAlertController显示时,这会更改窗口的色调。这很有帮助。