[Swift通天遁地]8、媒體與動畫-(14)使用TextKit快速實現文章的分欄效果

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-fxitqjfb-mc.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftgit

本文將演示對長文本進行分欄顯示。往項目中導入一份文本文件。github

在左側的項目導航區,打開視圖控制器的代碼文件【ViewController.swift】swift

如今開始編寫代碼,加載文本文件中的內容,並對文字進行分欄。微信

 1 import UIKit
 2 
 3 class ViewController: UIViewController {
 4 
 5     override func viewDidLoad() {
 6         super.viewDidLoad()
 7         // Do any additional setup after loading the view, typically from a nib.
 8         
 9         //文本視圖控件提供了很大的靈活性,能夠快速進行富文本視圖的建立和設計。
10         //在此初始化一個指定顯示區域的文本視圖,用來實現雜誌中常見的分欄效果。
11         let firstTextView = UITextView(frame: CGRect(x: 20, y: 40, width: 135, height: 200))
12         //設置第一個視圖的背景顏色爲棕色。
13         firstTextView.backgroundColor = UIColor.brown
14         //取消文本視圖的可滾動性,使多餘的沒法顯示的文字,自動進入第二個文本視圖。
15         firstTextView.isScrollEnabled = false;
16         //將第一個文本視圖添加到根視圖。
17         self.view.addSubview(firstTextView)
18         
19         //得到第一個視圖的文字存儲屬性
20         let textStorage = firstTextView.textStorage
21         //建立一個字符串,表示文本文件在項目中的路徑。
22         let path = Bundle.main.url(forResource: "word", withExtension: "txt")
23         //添加一個異常捕捉語句,用來讀取文本文件。
24         do
25         {
26             //讀取文本文件中的文字內容。
27             let string = try String(contentsOf: path!)
28             //將讀取的文字,賦予文本視圖的文字存儲屬性。
29             textStorage.replaceCharacters(in: NSRange(location: 0,length: 0), with: string)
30         }
31         catch
32         {
33             print("Something went wrong :(")
34         }
35         
36         //建立第二個文本視圖的顯示區域,它和第一個文本視圖的尺寸相同,可是位於第一個文本視圖的右側。
37         let secondRect = CGRect(x: 165, y: 40, width: 135, height: 200)
38         //初始化一個文字容器對象。
39         let secondTextContainer = NSTextContainer()
40         //使用文字容器對象,建立第二個文本視圖。
41         let secondTextView = UITextView(frame: secondRect, textContainer: secondTextContainer)
42         //設置第二個文本視圖的背景顏色爲棕色
43         secondTextView.backgroundColor = UIColor.brown
44         //取消文本視圖的可滾動性
45         secondTextView.isScrollEnabled = false
46         //將第二個文本視圖添加到根視圖。
47         self.view.addSubview(secondTextView)
48         
49         //使用相同的方式,建立最後一個文本視圖,該視圖位於兩個文本視圖的下方。
50         let thirdRect = CGRect(x: 20, y: 250, width: 280, height: 300)
51         //初始化一個文字容器對象。
52         let thirdTextContainer = NSTextContainer()
53         //使用文字容器對象,建立第三個文本視圖。
54         let thirdTextView = UITextView(frame: thirdRect, textContainer: thirdTextContainer)
55         //設置第三個文本視圖的背景顏色爲紫色。
56         thirdTextView.backgroundColor = UIColor.purple
57         //取消第三個文本視圖的可滾動性。
58         thirdTextView.isScrollEnabled = false
59         //將第三個文本視圖添加到根視圖
60         self.view.addSubview(thirdTextView)
61         
62         //初始化一個佈局管理器。
63         let layoutManager = NSLayoutManager()
64         //將第一個文本視圖的文字容器,添加到佈局管理器。
65         layoutManager.addTextContainer(firstTextView.textContainer)
66         //將第二個文本視圖的文字容器,也添加到佈局管理器。
67         layoutManager.addTextContainer(secondTextContainer)
68         //將第三個文本視圖的文字容器,添加到佈局管理器,
69         //管理器就能夠將三個文本視圖視爲一個容器,
70         //當內容超出第一個文本視圖的顯示範圍時,將自動填充第二個文本視圖,以此類推。
71         layoutManager.addTextContainer(thirdTextContainer)
72         //將佈局管理器,賦予一個文本視圖的文字存儲屬性,
73         //從而使三個文本視圖,均可以顯示第一個文本視圖的文字存儲屬性的內容。
74         textStorage.addLayoutManager(layoutManager)
75     }
76 
77     override func didReceiveMemoryWarning() {
78         super.didReceiveMemoryWarning()
79         // Dispose of any resources that can be recreated.
80     }
81 }
相關文章
相關標籤/搜索