iOS经典讲解之妙用UITextView

时间:2022-08-20 20:48:43
// 添加textView
- (void)addTextView
{
//UITextView可以使用父类的初始化方法initWithFrame:也可使用iOS7.0出现的自己独有的的初始化方法initWithFrame:textContainer:
//textContainer:是text接受者 可以为nil
// 讲解如果使用initWithFrame:textContainer:初始化方法需要注意的问题
// 这里先讲解三种类的关系:
//1、NSTextStorage保存并管理UITextView显示的文字信息,并且可以灵活的修改文字属性
//2、NSLayoutManager用于管理NSTextStorage中文字内容的排版布局
//3、NSTextContainer定义一个矩形区域用于存放已经进行了排版并设置好属性的文字

// 使三者建立联系:必须建立三者联系,否则用该初始化方法文字不显示
//创建container
NSTextContainer *container = [[NSTextContainer alloc] initWithSize:CGSizeMake(100, 100)];
container.widthTracksTextView = YES;
//创建layoutManager并添加container
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[layoutManager addTextContainer:container];
//创建storage并添加layoutManager
NSTextStorage *storage = [[NSTextStorage alloc] init];
[storage addLayoutManager:layoutManager];

/**
来向UITextStorage类或其子类发送开始或完成文字编辑的消息。在[storage beginEditing], [storage endEditing];两条语句之间进行相应的文字编辑设计文字的样式
[storage beginEditing];
NSDictionary *attrsDic = @{NSTextEffectAttributeName: NSTextEffectLetterpressStyle};
UIKIT_EXTERN NSString *const NSTextEffectAttributeName NS_AVAILABLE_IOS(7_0); // NSString, default nil: no text effect
NSMutableAttributedString *mutableAttrString = [[NSMutableAttributedString alloc] initWithString:@"Letterpress" attributes:attrsDic];
NSAttributedString *appendAttrString = [[NSAttributedString alloc] initWithString:@" Append:Letterpress"];
[mutableAttrString appendAttributedString:appendAttrString];
[storage setAttributedString:mutableAttrString];
[storage endEditing];

*/

// 最后在初始化方法中添加container
//UITextView继承于UIScrollView继承父类的所有属性和方法,这里只介绍经常使用的方法和属性支持多行输入
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(100, 100, 200, 100) textContainer:container];
// 设置背景颜色
textView.backgroundColor = [UIColor whiteColor];
// 设置字体颜色
textView.textColor = [UIColor blackColor];
// 设置字体和大小
textView.font = [UIFont fontWithName:@"Heiti TC" size:16];
// 设置内容
textView.text = @"输入内容";
// 设置弹出键盘类型
textView.keyboardType = UIKeyboardTypeDefault;
//设置键盘返回键的样式
textView.returnKeyType = UIReturnKeyNext;
// 设置是否允许滑动
textView.scrollEnabled = NO;
// 是否显示滑动条
textView.showsVerticalScrollIndicator = YES;
// 设置代理 遵循代理 UITextViewDelegate
textView.delegate = self;
[self.view addSubview:textView];
}

#pragma mark ---代理方法---

-(void)textViewDidBeginEditing:(UITextView *)textView
{
NSLog(@"开始编辑触发");
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
NSLog(@"结束编辑触发");
}

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
NSLog(@"将要编辑触发");
return YES;
}

-(BOOL)textViewShouldEndEditing:(UITextView *)textView
{
NSLog(@"将要结束编辑触发");
return YES;
}
// 在编辑范围是否允许输入某些text
// 如果你的textView里面不允许用回车,可以用此方法通过按回车回收键盘
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
} else {
return YES;
}
}