用TextKit搞點事情

2021-08-20 04:58:17 字數 3001 閱讀 1989

textkit框架主要的幾個view,主要包括uilabel,uitextview,uitextfield;

textkit是ns一支的,所以不光只在ios中使用;

text container對應nstextcontainer,它定義了文字排版區域,很明顯,文字是在這個區域中被管理的;

text storage對應nstextstorage,繼承自nsmutableattributedstring,用於儲存文字字形和相關屬性;

layout manager對應nslayoutmanager,負責對文字進行編輯排版處理,在上面第4條中的類儲存的資料可以通過本條中的類轉換顯示到檢視中,其中這個單詞字形(glyphs)需注意;

首先我們需要乙個自定義型別的uitextview,用它來對我們的文字內容進行自定義修改;

uitextview的初始化方法中有乙個textcontainer引數,很明顯是我們上面提到的,且如圖中三種顏色的框框所示,是我們上面提到的管理類,且全部為唯讀屬性;

並且就上面的三種類之前的管理,如果我們要自己管理的話,應該也是乙個樹型的結構;

接下來我們要配合nsattributedstring新增顯示強大的富文字;

private(set) var attributedproblem: nsattributedstring = nsattributedstring.init()

didset

}

我們需要乙個具有計算屬性的變數,當我們在內部修改該變數時做一些操作;上面的**解釋幾點:

//設定題目文字屬性

func setupsubject(text: string, font: uifont)

如果你以前用過富文字,那這個方法看起來沒什麼,無非就是做了兩件事:

生成乙個富文字;(有關於富文字的內容,可以自行谷歌一車)

將文字設定到我們的textview裡;

如果我們想修改某一截文字的屬性,那麼我們只需要將儲存的富文字取出,然後擷取位置,替換掉原先的富文字,然後重新設定到屬性中去,如下:

//當前要發生替換的區域

private(set) var optionsrange: nsrange?

//替換選項文字

func replaceoption(options: string, replaceoptions: string, font: uifont) else

self

.attributedproblem = changestring

}

當然我們要替換的文字當然也可以是富文字;

//上面的第8行中的方法

//給選項新增屬性

func textoptions(text: string, font: uifont) -> nsattributedstring

這裡需要注意的就是swift-range與oc-nsrange的轉換,關於swift的range個人感覺比以前難用了,但是更加通用了吧,說下轉換:

if

let optionsrange = changestring.

string

.range(of: options) else

//這裡我把發生替換的部分用變數儲存了下來

//新增富文字

// originstring 原始字串

// replacerange 要替換的文字範圍

// size 替換大小

func replacepicturefortext(originstring: nsattributedstring, replacerange: nsrange, size: cgsize) -> nsattributedstring

無他,仍然只是需要找到乙個替換區域,替換成想要的可支援的富文字屬性;

最後想告訴你我們可以通過nsrange來得到所在區域的座標,這是個無意中谷歌到的東西,如下:

let rect = self.problem

.textcontainer

.layoutmanager?.boundingrect(forglyphrange: self.problem

.optionsrange!,in: self.problem

.textcontainer)

self.problem

.scrollrangetovisible(self.problem

.optionsrange!)

找到目標區域,並定位到該區域;

OKR如何設定?用日事清跟蹤OKR

okr絕不應該在真空中建立,它必須反映公司的意圖 公司長遠目標 以及公司為捍衛其市場占有率所做的努力。換言之,它應該把使命 願景 戰略轉化為行動。為了避免大型頭腦風暴過程 現的 社會惰化 現象,我們建議通過小團隊方式來起草乙份okr草案,很可能就2個人。小團隊可以投入時間去蒐集掌握建立okr所必需的...

用JAVA解決呼叫ZIP的若干個事

記錄下最近解決zip的思路 1.如何處理壓縮解壓zip中密碼問題 jdk自帶zip庫和常用的ant中帶的zip庫沒有解決密碼問題,期初希望找到開源有提供這樣的庫,因為了解到.net中有提供個sharpziplib庫可以解決,但話了一段時間沒找到,最後覺得直接用winrar解決算了,雖然部署要安裝比較...

關於區塊鏈那些事(用Python3體現)

鏈客,有問必答!要弄懂什麼是區塊鏈技術的前提,首先要知道什麼是md5演算法。給乙個最簡單的md5解釋 任何乙個存在著的不發生變化的事物都有其乙個固定不變的md5編碼。這個md5編碼組成內容很簡單,就是0 9的數字和a f的字母組成的十六進製制,一共32位。編碼複雜性的核心原理就是我們可以從這個不變的...