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.
65 lines
2.4 KiB
65 lines
2.4 KiB
//
|
|
// FLEXArgumentInputJSONObjectView.m
|
|
// Flipboard
|
|
//
|
|
// Created by Ryan Olson on 6/15/14.
|
|
// Copyright (c) 2014 Flipboard. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXArgumentInputJSONObjectView.h"
|
|
#import "FLEXRuntimeUtility.h"
|
|
|
|
@implementation FLEXArgumentInputJSONObjectView
|
|
|
|
- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding
|
|
{
|
|
self = [super initWithArgumentTypeEncoding:typeEncoding];
|
|
if (self) {
|
|
// Start with the numbers and punctuation keyboard since quotes, curly braces, or
|
|
// square brackets are likely to be the first characters type for the JSON.
|
|
self.inputTextView.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
|
|
self.targetSize = FLEXArgumentInputViewSizeLarge;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setInputValue:(id)inputValue
|
|
{
|
|
self.inputTextView.text = [FLEXRuntimeUtility editableJSONStringForObject:inputValue];
|
|
}
|
|
|
|
- (id)inputValue
|
|
{
|
|
return [FLEXRuntimeUtility objectValueFromEditableJSONString:self.inputTextView.text];
|
|
}
|
|
|
|
+ (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
|
|
{
|
|
// Must be object type.
|
|
BOOL supported = type && type[0] == '@';
|
|
|
|
if (supported) {
|
|
if (value) {
|
|
// If there's a current value, it must be serializable to JSON
|
|
supported = [FLEXRuntimeUtility editableJSONStringForObject:value] != nil;
|
|
} else {
|
|
// Otherwise, see if we have more type information than just 'id'.
|
|
// If we do, make sure the encoding is something serializable to JSON.
|
|
// Properties and ivars keep more detailed type encoding information than method arguments.
|
|
if (strcmp(type, @encode(id)) != 0) {
|
|
BOOL isJSONSerializableType = NO;
|
|
// Note: we can't use @encode(NSString) here because that drops the string information and just goes to @encode(id).
|
|
isJSONSerializableType = isJSONSerializableType || strcmp(type, FLEXEncodeClass(NSString)) == 0;
|
|
isJSONSerializableType = isJSONSerializableType || strcmp(type, FLEXEncodeClass(NSNumber)) == 0;
|
|
isJSONSerializableType = isJSONSerializableType || strcmp(type, FLEXEncodeClass(NSArray)) == 0;
|
|
isJSONSerializableType = isJSONSerializableType || strcmp(type, FLEXEncodeClass(NSDictionary)) == 0;
|
|
|
|
supported = isJSONSerializableType;
|
|
}
|
|
}
|
|
}
|
|
|
|
return supported;
|
|
}
|
|
|
|
@end
|