Я хочу отключить / включить все UIViews в IBOutletCollection.Однако UIViews различаются по классу, поэтому я не могу вызвать setEnabled
напрямую.
Тогда я подумал, что для этого буду использовать метод performSelector
, однако я могу только отправить Object в качестве параметра.
Я читал как на этом сайте, так и на других сайтах, что я мог бы просто использовать [NSNumber numberWithBool YES/NO]
, однако включенное состояние не изменяется при отправке NSNumber с bool YES или NO.
Я получил отключенную часть для работы с помощью 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;
}
}
Где элементы управления - это IBOutletCollection, состоящая из UISliders, UIButtons, UITextViews и UITextfields,(@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *controls;
)
Примечание: UITextViews отлично работает с приведенным выше кодом, это только другой тип UIViews, который использует setEnabled
.