You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.1 KiB
87 lines
2.1 KiB
//
|
|
// FLEXArgumentInputSwitchView.m
|
|
// Flipboard
|
|
//
|
|
// Created by Ryan Olson on 6/16/14.
|
|
// Copyright (c) 2014 Flipboard. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXArgumentInputSwitchView.h"
|
|
|
|
@interface FLEXArgumentInputSwitchView ()
|
|
|
|
@property (nonatomic, strong) UISwitch *inputSwitch;
|
|
|
|
@end
|
|
|
|
@implementation FLEXArgumentInputSwitchView
|
|
|
|
- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding
|
|
{
|
|
self = [super initWithArgumentTypeEncoding:typeEncoding];
|
|
if (self) {
|
|
self.inputSwitch = [[UISwitch alloc] init];
|
|
[self.inputSwitch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];
|
|
[self.inputSwitch sizeToFit];
|
|
[self addSubview:self.inputSwitch];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
|
|
#pragma mark Input/Output
|
|
|
|
- (void)setInputValue:(id)inputValue
|
|
{
|
|
BOOL on = NO;
|
|
if ([inputValue isKindOfClass:[NSNumber class]]) {
|
|
NSNumber *number = (NSNumber *)inputValue;
|
|
on = [number boolValue];
|
|
} else if ([inputValue isKindOfClass:[NSValue class]]) {
|
|
NSValue *value = (NSValue *)inputValue;
|
|
if (strcmp([value objCType], @encode(BOOL)) == 0) {
|
|
[value getValue:&on];
|
|
}
|
|
}
|
|
self.inputSwitch.on = on;
|
|
}
|
|
|
|
- (id)inputValue
|
|
{
|
|
BOOL isOn = [self.inputSwitch isOn];
|
|
NSValue *boxedBool = [NSValue value:&isOn withObjCType:@encode(BOOL)];
|
|
return boxedBool;
|
|
}
|
|
|
|
- (void)switchValueDidChange:(id)sender
|
|
{
|
|
[self.delegate argumentInputViewValueDidChange:self];
|
|
}
|
|
|
|
|
|
#pragma mark - Layout and Sizing
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
[super layoutSubviews];
|
|
|
|
self.inputSwitch.frame = CGRectMake(0, self.topInputFieldVerticalLayoutGuide, self.inputSwitch.frame.size.width, self.inputSwitch.frame.size.height);
|
|
}
|
|
|
|
- (CGSize)sizeThatFits:(CGSize)size
|
|
{
|
|
CGSize fitSize = [super sizeThatFits:size];
|
|
fitSize.height += self.inputSwitch.frame.size.height;
|
|
return fitSize;
|
|
}
|
|
|
|
|
|
#pragma mark - Class Helpers
|
|
|
|
+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
|
|
{
|
|
// Only BOOLs. Current value is irrelevant.
|
|
return type && strcmp(type, @encode(BOOL)) == 0;
|
|
}
|
|
|
|
@end
|