iOS经典讲解之妙用UITextView

// 添加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;
    }
}

你可能感兴趣的:(ios,UITextView,NSTextContainer)