gpt4 book ai didi

ios - 禁用 IBOutletCollection 中的所有 subview

转载 作者:行者123 更新时间:2023-11-29 13:41:35 25 4
gpt4 key购买 nike

我想禁用/启用 IBOutletCollection 中的所有 UIView。但是 UIViews 类不同,所以我不能直接调用 setEnabled

然后我想我会使用 performSelector 方法来完成它,但是我只能发送一个对象作为参数。

我在这个网站和其他网站上都读到我可以只使用[NSNumber numberWithBool YES/NO],但是当发送带有 bool YES 或没有。

我通过使用 nil 使禁用的部分工作,但是我找不到将其设置为启用的方法:

-(void) setControlsState: (BOOL) enabled

{
for(UIView *subview in controls)
{
NSNumber *boolObject = enabled? [NSNumber numberWithBool: YES]: nil;
if([subview respondsToSelector: @selector(setEnabled:)])
{
[subview performSelector: @selector(setEnabled:) withObject: boolObject];
}
else if([subview respondsToSelector: @selector(setEditable:)])
{
[subview performSelector: @selector(setEditable:) withObject: boolObject];
}
subview.alpha = enabled? 1: 0.5;
}
}

其中控件是由 UISliders、UIButtons、UITextViews 和 UITextfields 组成的 IBOutletCollection。 (@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *controls;)

注意: UITextViews 使用上面的代码可以正常工作,它只是另一种类型的 UIViews,它使用 setEnabled

最佳答案

您有没有使用禁止触摸事件的 userInteractionEnabled 的特定原因?

-(void) setControlsState: (BOOL) enabled
{
for(UIView *aView in controls)
{
if ([aView isKindOfClass:[UIView class]]){
aView.userInteractionEnabled = enabled;
aView.alpha = (enabled)?1.0:0.5;// Be mindful of this it doesn't seem to respect group opacity. i.e. sliders look funny.
}
}
}

如果有,你可以在检查它的类后简单地转换 aView 指针,就像这样:(当然你必须枚举你使用的所有类)

-(void) setControlsState: (BOOL) enabled
{
for(UIView *aView in controls)
{
if ([aView isKindOfClass:[UISlider class]]){
[(UISlider *)aView setEnabled:enabled];
}
if ([aView isKindOfClass:[UITextView class]]){
[(UITextView *)aView setEditable:enabled];
}
// and so forth
}
}

关于ios - 禁用 IBOutletCollection 中的所有 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com