iOS

前言

	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 = @"写代码快乐
    15911110524
    写代码快乐
    https://www.baidu.com
    写代码快乐";
    	    
    	// 设置对齐方式
    	/*
    		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 = "写代码快乐
    15911110524
    写代码快乐
    https://www.baidu.com
    写代码快乐"
    	    
    	// 设置文本颜色
    	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) {
    	    
    	}
    
原文地址:https://www.cnblogs.com/QianChia/p/5753887.html