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位。編碼複雜性的核心原理就是我們可以從這個不變的...