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.
121 lines
3.1 KiB
121 lines
3.1 KiB
//
|
|
// FLEXArgumentInputTextView.m
|
|
// FLEXInjected
|
|
//
|
|
// Created by Ryan Olson on 6/15/14.
|
|
//
|
|
//
|
|
|
|
#import "FLEXArgumentInputTextView.h"
|
|
#import "FLEXUtility.h"
|
|
|
|
@interface FLEXArgumentInputTextView () <UITextViewDelegate>
|
|
|
|
@property (nonatomic, strong) UITextView *inputTextView;
|
|
@property (nonatomic, readonly) NSUInteger numberOfInputLines;
|
|
|
|
@end
|
|
|
|
@implementation FLEXArgumentInputTextView
|
|
|
|
- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding
|
|
{
|
|
self = [super initWithArgumentTypeEncoding:typeEncoding];
|
|
if (self) {
|
|
self.inputTextView = [[UITextView alloc] init];
|
|
self.inputTextView.font = [[self class] inputFont];
|
|
self.inputTextView.backgroundColor = [UIColor whiteColor];
|
|
self.inputTextView.layer.borderColor = [[UIColor blackColor] CGColor];
|
|
self.inputTextView.layer.borderWidth = 1.0;
|
|
self.inputTextView.autocapitalizationType = UITextAutocapitalizationTypeNone;
|
|
self.inputTextView.autocorrectionType = UITextAutocorrectionTypeNo;
|
|
self.inputTextView.delegate = self;
|
|
self.inputTextView.inputAccessoryView = [self createToolBar];
|
|
[self addSubview:self.inputTextView];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
#pragma mark - private
|
|
|
|
- (UIToolbar*)createToolBar
|
|
{
|
|
UIToolbar *toolBar = [UIToolbar new];
|
|
[toolBar sizeToFit];
|
|
UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
|
|
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(textViewDone)];
|
|
toolBar.items = @[spaceItem, doneItem];
|
|
return toolBar;
|
|
}
|
|
|
|
- (void)textViewDone
|
|
{
|
|
[self.inputTextView resignFirstResponder];
|
|
}
|
|
|
|
|
|
#pragma mark - Text View Changes
|
|
|
|
- (void)textViewDidChange:(UITextView *)textView
|
|
{
|
|
[self.delegate argumentInputViewValueDidChange:self];
|
|
}
|
|
|
|
|
|
#pragma mark - Superclass Overrides
|
|
|
|
- (BOOL)inputViewIsFirstResponder
|
|
{
|
|
return self.inputTextView.isFirstResponder;
|
|
}
|
|
|
|
|
|
#pragma mark - Layout and Sizing
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
[super layoutSubviews];
|
|
|
|
self.inputTextView.frame = CGRectMake(0, self.topInputFieldVerticalLayoutGuide, self.bounds.size.width, [self inputTextViewHeight]);
|
|
}
|
|
|
|
- (NSUInteger)numberOfInputLines
|
|
{
|
|
NSUInteger numberOfInputLines = 0;
|
|
switch (self.targetSize) {
|
|
case FLEXArgumentInputViewSizeDefault:
|
|
numberOfInputLines = 2;
|
|
break;
|
|
|
|
case FLEXArgumentInputViewSizeSmall:
|
|
numberOfInputLines = 1;
|
|
break;
|
|
|
|
case FLEXArgumentInputViewSizeLarge:
|
|
numberOfInputLines = 8;
|
|
break;
|
|
}
|
|
return numberOfInputLines;
|
|
}
|
|
|
|
- (CGFloat)inputTextViewHeight
|
|
{
|
|
return ceil([[self class] inputFont].lineHeight * self.numberOfInputLines) + 16.0;
|
|
}
|
|
|
|
- (CGSize)sizeThatFits:(CGSize)size
|
|
{
|
|
CGSize fitSize = [super sizeThatFits:size];
|
|
fitSize.height += [self inputTextViewHeight];
|
|
return fitSize;
|
|
}
|
|
|
|
|
|
#pragma mark - Class Helpers
|
|
|
|
+ (UIFont *)inputFont
|
|
{
|
|
return [FLEXUtility defaultFontOfSize:14.0];
|
|
}
|
|
|
|
@end
|