您的位置:首页 > 产品设计 > UI/UE

UITextView - 6

2015-12-03 14:35 573 查看
上一篇章我们了解了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
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS UITextView inputView