iOS - UITextView

前言

    NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextView : UIScrollView <UITextInput>
    @available(iOS 2.0, *)       public class UITextView : UIScrollView, UITextInput
  • UITextView 具有 label 大部分属性,以及 textField 的属性。

1、UITextView 的创建

  • Objective-C

        UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 30, self.view.frame.size.width - 20, 400)];
    
        // 将 textView 添加到 view
        [self.view addSubview:textView];
  • Swift

        let textView:UITextView = UITextView(frame: CGRectMake(10, 30, self.view.frame.size.width - 20, 400))
    
        // 将 textView 添加到 view
        self.view.addSubview(textView)

2、UITextView 的设置

  • Objective-C

        // 设置背景颜色
        textView.backgroundColor = [UIColor lightGrayColor];
    
        // 设置文本
        /*
            由于 UITextView 具有滚动功能,当 text 文本内容较多时可以实现滚动阅读和编辑
        */
        textView.text = @"写代码快乐\n15911110524\n写代码快乐\nhttps://www.baidu.com\n写代码快乐";
    
        // 设置对齐方式
        /*
            NSTextAlignmentLeft      = 0,    // Visually left aligned
            NSTextAlignmentCenter    = 1,    // Visually centered
            NSTextAlignmentRight     = 2,    // Visually right aligned
            NSTextAlignmentJustified = 3,    // Fully-justified. The last line in a paragraph is natural-aligned.
            NSTextAlignmentNatural   = 4,    // Indicates the default alignment for script
        */
        textView.textAlignment = NSTextAlignmentLeft;
    
        // 设置文本颜色
        textView.textColor = [UIColor redColor];
    
        // 设置字体
        textView.font = [UIFont boldSystemFontOfSize:20];
    
        // 对文本中的电话和网址自动加链接 
        /*
            UIDataDetectorTypePhoneNumber                              = 1 << 0,  // Phone number detection
            UIDataDetectorTypeLink                                     = 1 << 1,  // URL detection
            UIDataDetectorTypeAddress NS_ENUM_AVAILABLE_IOS(4_0)       = 1 << 2,  // Street address detection
            UIDataDetectorTypeCalendarEvent NS_ENUM_AVAILABLE_IOS(4_0) = 1 << 3,  // Event detection
            UIDataDetectorTypeNone                                     = 0,       // No detection at all
            UIDataDetectorTypeAll                                      = NSUIntegerMax    // All types
        */
        textView.dataDetectorTypes = UIDataDetectorTypeAll;
    
        // 禁止编辑
        /*
            设置为只读,不再能输入内容
        */
        textView.editable = NO;
    
        // 禁止选择
        /*
            禁止选中文本,此时文本也禁止编辑
        */
        textView.selectable = NO;
    
        // 禁止滚动
        textView.scrollEnabled = NO;
    
        // 获取当前选择的范围
        NSRange range = textView.selectedRange;
    
        // 设置可以对选中的文字加粗
        /*
            选中文字时可以对选中的文字加粗
        */
        textView.allowsEditingTextAttributes = YES;
    
        // 设置 textView 的代理,需遵守协议 <UITextViewDelegate>
        textView.delegate = self;
  • Swift

        // 设置背景颜色
        textView.backgroundColor = UIColor.lightGrayColor()
    
        // 设置文本
        /*
            由于 UITextView 具有滚动功能,当 text 文本内容较多时可以实现滚动阅读和编辑
        */
        textView.text = "写代码快乐\n15911110524\n写代码快乐\nhttps://www.baidu.com\n写代码快乐"
    
        // 设置文本颜色
        textView.textColor = UIColor.redColor()
    
        // 设置对齐方式
        /*
            case Left       // Visually left aligned
            case Center     // Visually centered
            case Right      // Visually right aligned
            case Justified  // Fully-justified. The last line in a paragraph is natural-aligned.
            case Natural    // Indicates the default alignment for script
        */
        textView.textAlignment = .Left
    
        // 设置字体
        textView.font = UIFont.systemFontOfSize(20)
    
        // 对文本中的电话和网址自动加链接
        /*
            PhoneNumber      // Phone number detection
            Link             // URL detection
            Address          // Street address detection
            CalendarEvent    // Event detection
            None             // No detection at all
            All              // All types
        */
        textView.dataDetectorTypes = .All
    
        // 禁止编辑
        /*
            设置为只读,不再能输入内容
        */
        textView.editable = false
    
        // 禁止选择
        /*
            禁止选中文本,此时文本也禁止编辑
        */
        textView.selectable = false
    
        // 禁止滚动
        textView.scrollEnabled = false
    
        // 获取当前选择的范围
        let range:NSRange = textView.selectedRange
    
        // 设置可以对选中的文字加粗
        /*
            选中文字时可以对选中的文字加粗
        */
        textView.allowsEditingTextAttributes = true
    
        // 设置 textView 的代理,需遵守协议 UITextViewDelegate
        textView.delegate = self

3、UITextViewDelegate 的协议方法

  • 需遵守协议 UITextViewDelegate,并设置代理

  • Objective-C

        // 将要开始编辑,编辑开始前被调用
        - (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    
            return YES;
        }
    
        // 已经开始编辑,编辑开始后被调用
        - (void)textViewDidBeginEditing:(UITextView *)textView {
    
        }
    
        // 将要结束编辑,编辑结束前被调用
        - (BOOL)textViewShouldEndEditing:(UITextView *)textView {
    
            return YES;
        }
    
        // 已经结束编辑,编辑结束后被调用
        - (void)textViewDidEndEditing:(UITextView *)textView {
    
            NSLog(@"编辑的内容是 : %@", textView.text);
        }
    
        // 文本修改,文本修改前被调用
        - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    
            return YES;
        }
    
        // 文本变更,文本变更时被调用,每输入一个字符时都会被调用
        - (void)textViewDidChange:(UITextView *)textView {
    
        }
    
        // 游标移动,选择范围发生变化时被调用
        - (void)textViewDidChangeSelection:(UITextView *)textView {
    
        }
  • Swift

        // 将要开始编辑,编辑开始前被调用
        func textViewShouldBeginEditing(textView: UITextView) -> Bool {
    
            return true
        }
    
        // 已经开始编辑,编辑开始后被调用
        func textViewDidBeginEditing(textView: UITextView) {
    
        }
    
        // 将要结束编辑,编辑结束前被调用
        func textViewShouldEndEditing(textView: UITextView) -> Bool {
    
            return true
        }
    
        // 已经结束编辑,编辑结束后被调用
        func textViewDidEndEditing(textView: UITextView) {
    
            print("编辑的内容是 : \(textView.text)")
        }
    
        // 文本修改,文本修改前被调用
        func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    
            return true
        }
    
        // 文本变更,文本变更时被调用,每输入一个字符时都会被调用
        func textViewDidChange(textView: UITextView) {
    
        }
    
        // 游标移动,选择范围发生变化时被调用
        func textViewDidChangeSelection(textView: UITextView) {
    
        }
上一篇:iOS - UIControl


下一篇:飞天加速计划·高校学生在家实践