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.
|
|
// // FLEXArgumentInputFontsPickerView.m // FLEX // // Created by 啟倫 陳 on 2014/7/27. // Copyright (c) 2014年 f. All rights reserved. //
#import "FLEXArgumentInputFontsPickerView.h" #import "FLEXRuntimeUtility.h"
@interface FLEXArgumentInputFontsPickerView ()
@property (nonatomic, strong) NSMutableArray<NSString *> *availableFonts;
@end
@implementation FLEXArgumentInputFontsPickerView
- (instancetype)initWithArgumentTypeEncoding:(const char *)typeEncoding { self = [super initWithArgumentTypeEncoding:typeEncoding]; if (self) { self.targetSize = FLEXArgumentInputViewSizeSmall; [self createAvailableFonts]; self.inputTextView.inputView = [self createFontsPicker]; } return self; }
- (void)setInputValue:(id)inputValue { self.inputTextView.text = inputValue; if ([self.availableFonts indexOfObject:inputValue] == NSNotFound) { [self.availableFonts insertObject:inputValue atIndex:0]; } [(UIPickerView *)self.inputTextView.inputView selectRow:[self.availableFonts indexOfObject:inputValue] inComponent:0 animated:NO]; }
- (id)inputValue { return [self.inputTextView.text length] > 0 ? [self.inputTextView.text copy] : nil; }
#pragma mark - private
- (UIPickerView*)createFontsPicker { UIPickerView *fontsPicker = [UIPickerView new]; fontsPicker.dataSource = self; fontsPicker.delegate = self; fontsPicker.showsSelectionIndicator = YES; return fontsPicker; }
- (void)createAvailableFonts { NSMutableArray<NSString *> *unsortedFontsArray = [NSMutableArray array]; for (NSString *eachFontFamily in [UIFont familyNames]) { for (NSString *eachFontName in [UIFont fontNamesForFamilyName:eachFontFamily]) { [unsortedFontsArray addObject:eachFontName]; } } self.availableFonts = [NSMutableArray arrayWithArray:[unsortedFontsArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]]; }
#pragma mark - UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; }
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return [self.availableFonts count]; }
#pragma mark - UIPickerViewDelegate
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *fontLabel; if (!view) { fontLabel = [UILabel new]; fontLabel.backgroundColor = [UIColor clearColor]; fontLabel.textAlignment = NSTextAlignmentCenter; } else { fontLabel = (UILabel*)view; } UIFont *font = [UIFont fontWithName:self.availableFonts[row] size:15.0]; NSDictionary<NSString *, id> *attributesDictionary = [NSDictionary<NSString *, id> dictionaryWithObject:font forKey:NSFontAttributeName]; NSAttributedString *attributesString = [[NSAttributedString alloc] initWithString:self.availableFonts[row] attributes:attributesDictionary]; fontLabel.attributedText = attributesString; [fontLabel sizeToFit]; return fontLabel; }
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { self.inputTextView.text = self.availableFonts[row]; }
@end
|