UITextView继承自UIScrollerView,所以在使用的时候,我们可以用到一些UIScrollerView方法。为了能够详细说明,直接上代码。
下面就利用UITextView模仿一部分新浪微博发文字微博的功能,主要是为了对UITextView的属性和方法做一下介绍。
首先还是创建一个UITextView
#import "ViewController.h"
#define screen_width [UIScreen mainScreen].bounds.size.width
#define screen_height [UIScreen mainScreen].bounds.size.height
@interface ViewController ()<UITextViewDelegate>
{
UITextView * _textView;
UIButton * _endEd;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createTextView];
[self createNav];
}
#pragma mark 创建TextView
//创建TextView
- (void)createTextView
{
float tw = screen_width;
float th = screen_height;
_textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 64, tw, th - 64)];
_textView.delegate = self;
_textView.contentSize = CGSizeMake(tw, th - 63);
_textView.showsHorizontalScrollIndicator = NO;
_textView.showsVerticalScrollIndicator = NO;
[_textView becomeFirstResponder];
[self.view addSubview:_textView];
}
再来一个导航栏
#pragma mark 创建一个导航栏
//创建导航栏
- (void)createNav
{
UIView * nav = [[UIView alloc] initWithFrame:(CGRectMake(0, 0, screen_width, 64))];
nav.backgroundColor = [UIColor colorWithRed:244 / 255.0f green:244 / 255.0f blue:244 / 255.0f alpha:0.8];
[self.view addSubview:nav];
_endEd = [[UIButton alloc] initWithFrame:(CGRectMake(300, 27, 50, 30))];
[_endEd setTitle:@"发送" forState:(UIControlStateNormal)];
[self endEdEnabled:NO];
[_endEd addTarget:self action:@selector(endED) forControlEvents:(UIControlEventTouchUpInside)];
[nav addSubview:_endEd];
}
//判断发送按钮是否可以点击及状态
- (void)endEdEnabled:(BOOL) isEnabled
{
if (isEnabled == YES) {
_endEd.enabled = YES;
[_endEd setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
_endEd.backgroundColor = [UIColor orangeColor];
}
else if (isEnabled == NO)
{
_endEd.enabled = NO;
[_endEd setTitleColor:[UIColor grayColor] forState:(UIControlStateNormal)];
_endEd.backgroundColor = [UIColor colorWithRed:244 / 255.0f green:244 / 255.0f blue:244 / 255.0f alpha:1];
}
}
//在导航栏里添加按钮
- (void)endED
{
UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"假装发送了" message:_textView.text delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[a show];
[_textView resignFirstResponder];
}
接下来就关键了,我们很多功能都是通过代理来实现的,毕竟textView没有继承UIControl
#pragma mark TextViewDelegate的回调
//判断TextView里文字是否为空,如果不是,则可移除第一响应者
- (void)textViewDidChange:(UITextView *)textView
{
if ([textView.text isEqualToString:@""]) {
[self endEdEnabled:NO];
}
else
{
[self endEdEnabled:YES];
}
}
//用户将要开始编辑时激发
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
return YES;
}
//用户将要结束编辑时激发
- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
return YES;
}
//用户开始编辑时激发
- (void)textViewDidBeginEditing:(UITextView *)textView
{
}
//用户结束编辑时激发
- (void)textViewDidEndEditing:(UITextView *)textView
{
}
//当textView中指定范围的文字被替换时激发
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
return YES;
}
//当用户选中textView中某些文本时激发
- (void)textViewDidChangeSelection:(UITextView *)textView
{
}
#pragma mark UIScrollViewDelegate的回调
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[_textView resignFirstResponder];
}
ok~大功告成~~~~