UITextView - 6

来源:互联网 发布:冒泡排序法c语言 编辑:程序博客网 时间:2024/06/11 08:18

上一篇章我们了解了inputAccessView的具体意义,那我们这里来了解一下inputView的作用。

默认的UITextView的inputView是系统键盘,如下:


当UITextView被触发成第一响应者的时候,就会弹出这个键盘。


当我们想着如果第一响应者触发出的并不是键盘的时候,我们会继承一个UITextView的子类并且重写这个属性,如下:

#import <UIKit/UIKit.h>#pragma mark - Review the UITextView's property : inputView.@interface LBIViewTextView : UITextView <UIPickerViewDataSource, UIPickerViewDelegate>{    UIPickerView* _inputView;}@property (nonatomic, strong, readwrite) UIPickerView* inputView;@end@interface LBInputViewController : UIViewController@property (nonatomic, strong) LBIViewTextView* myTextView;@end


实现文件:

#import "LBInputViewController.h"@implementation LBIViewTextView@synthesize inputView;//rewrite inputView property .- (UIPickerView* )inputView{    if (!_inputView)    {        UIPickerView* pickView = [[UIPickerView alloc]                                  initWithFrame:CGRectMake(0, 200, 300, 200)];        pickView.delegate   = self;        pickView.dataSource = self;        pickView.showsSelectionIndicator = YES;                return pickView;    }        return _inputView;}- (BOOL)canBecomeFirstResponder{    return YES;}- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{    return 1;}- (NSString* )pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{    return [NSString stringWithFormat:@"%ld", (long)row];}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{    return 5;}- (void)dealloc{    _inputView = nil;}@end#pragma mark - LBInputViewController  - - - - - - - - - -@interface LBInputViewController ()@end@implementation LBInputViewController- (void)viewDidLoad{    [super viewDidLoad];        self.myTextView = [[LBIViewTextView alloc] init];    [self.myTextView setFrame:CGRectMake(0, 0, 300, 35)];    [self.myTextView setCenter:CGPointMake(self.view.center.x, self.view.center.y - 50)];    [self.myTextView setReturnKeyType:UIReturnKeyNext];    [self.myTextView setScrollEnabled:YES];    [self.myTextView setFont:[UIFont systemFontOfSize:18.0]];    [self.myTextView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];        [self.myTextView.layer setBackgroundColor:[UIColor clearColor].CGColor];    [self.myTextView.layer setBorderColor:[UIColor lightGrayColor].CGColor];    [self.myTextView.layer setBorderWidth:1.0];    [self.myTextView.layer setCornerRadius:8.0f];    [self.myTextView.layer setMasksToBounds:YES];        [self.view addSubview:self.myTextView];}@end

结果:


这时候触发第一响应者就可以弹出我们自定义的UIPickerView啦。是不是很神奇咧。

上一篇章讲到,其实 inputView 和 inputAccessoryView 都是来自最底层的UIResponder类的,所以你还可以在UIView,UITableViewCell等等具备成为第一响应者触发能力的类去实现。当然有一些要做特别处理,例如单纯的UITableViewCell的 点击方法didSelect 方法并不完全等价于成为第一响应者,所以要重写 canBecomeFirstResponder 方法和手动去让它成为第一响应者 :[cell becomeFirstResponder] 等,具体问题具体分析啦!


参考:

http://www.360doc.com/content/14/0509/18/11029609_376170517.shtml

http://www.cnblogs.com/worldtraveler/archive/2012/09/18/2691406.html

 

0 0
原创粉丝点击