【发布时间】:2015-12-29 08:29:25
【问题描述】:
我想禁用/启用 IBOutletCollection 中的所有 UIView。
但是 UIView 的类不同,所以我不能直接调用setEnabled。
然后我想我会使用performSelector 方法来做到这一点,但是我只能发送一个对象作为参数。
我在本网站和其他网站上都阅读过我可以使用 [NSNumber numberWithBool YES/NO] 的内容,但是在发送带有布尔值 YES 或 NO 的 NSNumber 时,启用状态不会改变。
我使用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。
【问题讨论】: