IOS 開發之UITextField的游標操作擴充套件

2022-09-24 13:45:14 字數 1892 閱讀 5258

ios 開發程式設計客棧之uitextfield的游標操作擴充套件

簡介在ios開發中,有時候需要完全自主的定義鍵盤,用於完整的單詞輸入,例如計算機應用中,需要一次性的輸入sin(,在移動游標時要完整的跳過sin(,在刪除時也要完整的刪除,這就需要對游標的位置進行精確控制,而ios並沒有相關的函式可以直接操作游標,只給出了選擇某個區域的功能,本文將介紹基於區域選擇設計的uitextfield擴充套件,用於獲取游標位置以及移動游標。

實現原理

游標位置的獲取

在textfield中,有乙個屬性稱之為selectedtextrange,這個屬性為uitextrange型別,包含[start,end)兩個值,通過實驗我們可以發現,在沒有文字被選取時,start代表當前游標的位置,而end=0;當有區域被選擇時,start和end分別是選擇的頭和尾的游標位置,從0開始,並且不包含end,例如選擇了0~3的位置,則start=0,end=4。

游標的移動

通過setselectedtextrange:方法可以設定選取範圍,我們只要設定乙個選取單個字元的範圍,即可移動游標而不選中。

關鍵屬性

// 內容為[start,end),無論是否有選取區域,start都描述了游標的位置。

@property (nullable, readwrite, copy) uitextrange *selectedtextrange;

// 文首和文尾的位置

@property (nonatomic, readonly) uitextposition *beginningofdocument;

@property (nonatomic, readonly) uitextposition *endofdocument;

關鍵方法

// 獲取以from為基準的to的偏移,例如abcde,游標在c後,則游標相對文尾的偏移為-2。

- (nsinteger)offsetfromposition:(uitextposition *)from toposition:(uitextposition *)toposition;

// 獲取以from為基準偏移offset的游標位置。

- (nullable uitextposition *)positionfromposition:(uitextposition *)position offset:(nsinteger)offset;

// 建立乙個uitextrange

- (nullable uitextrange *)textrangefromposition:(uitextposition *)fromposition toposition:(uitextposition *)toposition;

具體實現

下面的**為uitextfield建立了乙個分類(category),包含三個方法,tzrwhujcr分別用於獲取游標位置、從當前位置偏移、從頭偏移。

#import

@inte***ce uitextfield (extension)

- (nsinteger)curoffset;

- (void)makeoffset:(nsinteger)offset;

- (void)makeoffsetfrombeginning:(nsinteger)offset;

@end

#import "uitextfield+extension.h"

@implementation uitextfield (extension)

- (nsinteger)curoffset

- (void)makeoffset:(nsinteger)offset

- (void)makeoffsetfrombeginning:(nsinteger)offset

@end

本文標題: ios 開發之uitextfield的游標操作擴充套件

本文位址:

iOS開發之歸檔

歸檔是一種物件都可以實現的更加常規的序列化方式。適用對模型物件進行歸檔的技術可以輕鬆將複雜物件寫入檔案和從檔案中進行讀取。大多數支援儲存資料的foundation和cocos touch類都遵循nscoding協議 不過有些例外,例如uiiamge 因此對於大多數系統提供的類而言,歸檔比較輕鬆。如果...

iOS 開發之封裝

繼承,封裝,多型是物件導向程式設計的三大基石 在ui 中,封裝可以降低 的冗餘度,節省 量,避免了重複 在這裡簡單的封裝了乙個label和乙個textfield,組成了乙個登陸介面的樣式 新建了乙個檢視,這是檢視的.h檔案,這個檢視的一些方法 這個是.m檔案中 對label和textfield進行布...

IOS開發之 入門

目前主要的移動開發平台有 android ios windowsphone,前兩者佔據著絕大多數的終端應用,我們常說的移動開發就是指 android和ios開發。本位主要講述ios的開發。開發ios應用,需要專門的硬體裝置 開發工具 特定語言的支援,下面將逐一介紹這些知識點 硬體mac筆記本或一體機...