日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

(一三〇)UITextField的光标操作扩展

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (一三〇)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),包含三個方法,分別用于獲取光標位置、從當前位置偏移、從頭偏移。
#import <UIKit/UIKit.h>@interface UITextField (Extension)- (NSInteger)curOffset;
- (void)makeOffset:(NSInteger)offset;
- (void)makeOffsetFromBeginning:(NSInteger)offset;@end
#import "UITextField+Extension.h"@implementation UITextField (Extension)- (NSInteger)curOffset{// 基于文首計算出到光標的偏移數值。return [self offsetFromPosition:self.beginningOfDocument toPosition:self.selectedTextRange.start];}- (void)makeOffset:(NSInteger)offset{// 實現原理是先獲取一個基于文尾的偏移,然后加上要施加的偏移,再重新根據文尾計算位置,最后利用選取來實現光標定位。UITextRange *selectedRange = [self selectedTextRange];NSInteger currentOffset = [self offsetFromPosition:self.endOfDocument toPosition:selectedRange.end];currentOffset += offset;UITextPosition *newPos = [self positionFromPosition:self.endOfDocument offset:currentOffset];self.selectedTextRange = [self textRangeFromPosition:newPos toPosition:newPos];}- (void)makeOffsetFromBeginning:(NSInteger)offset{// 先把光標移動到文首,然后再調用上面實現的偏移函數。UITextPosition *begin = self.beginningOfDocument;UITextPosition *start = [self positionFromPosition:begin offset:0];UITextRange *range = [self textRangeFromPosition:start toPosition:start];[self setSelectedTextRange:range];[self makeOffset:offset];}@end

轉載于:https://www.cnblogs.com/aiwz/p/6154024.html

總結

以上是生活随笔為你收集整理的(一三〇)UITextField的光标操作扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91亚洲网| 精品久久免费 | 日韩精品激情 | 都市激情麻豆 | 国产经典久久久 | 好爽又高潮了毛片 | 日韩成人av一区二区 | 亚洲国产精彩中文乱码av | 婷婷视频| 日韩精品国产一区 | 欧美日韩精品电影 | 天天干天天干天天操 | 瑟瑟视频在线观看 | 欧美极品视频在线观看 | 天堂网www. | 岛国一区二区 | 嫩草影院在线视频 | 日韩午夜一区 | 伊人中文字幕在线观看 | 欧美黑人一区二区三区 | 九色91蝌蚪 | 狠狠狠狠狠狠狠干 | 99久久精| 天天爽天天 | 欧美123| 久久逼逼 | 一区二区三区日韩视频 | 久久嫩草| 中文字幕在线观看视频一区二区 | 美女视频在线免费观看 | 播色屋 | 久久成年视频 | 中文字幕在线观看精品 | 久久国产a| 精品无码一区二区三区 | 日本色一区 | 成人区视频 | 日韩视频免费观看高清完整版 | 福利社区一区二区 | 色女人综合| 福利在线一区二区 | 在线不卡 | 在线日韩亚洲 | 一个人看的视频www 色就是色网站 | 亚洲欧美影院 | 国产玖玖在线 | www.欧美亚洲 | 特级毛片在线观看 | 胖女人做爰全过程 | 丰满岳跪趴高撅肥臀尤物在线观看 | 国产一伦一伦一伦 | 超碰人人草人人干 | www免费网站在线观看 | 天堂成人国产精品一区 | 91精品综合久久久久久五月天 | 四虎视频在线观看 | 免费看一级黄色片 | 久久精品2| 在线观看a网站 | 国产一国产精品一级毛片 | 电影桑叶2在线播放完整版 222aaa | wwwxxx在线观看 | 熟妇人妻中文字幕 | 中文字幕在线观看视频免费 | 国产视频三级 | 波多野结衣影院 | 中文在线天堂网 | 日本www免费 | jzzijzzij亚洲成熟少妇18 欧美www在线观看 | 好吊日精品视频 | 精品日韩视频 | 在线观看视频日韩 | 超碰国产一区二区三区 | 亚洲国产精彩视频 | 懂色一区二区二区av免费观看 | 天天爽夜夜爽夜夜爽精品视频 | 黄瓜视频在线播放 | 国产欧美一区二区三区精华液好吗 | 久久看片 | 超碰666| 久久国产一区二区 | 在线观看精品视频 | 婷婷一区二区三区 | 国产黄色免费网站 | 黄网www | 肉色丝袜小早川怜子av | 精品人伦一区二区三 | 91亚洲欧美激情 | 亚洲免费在线 | 亚洲av无码乱码国产精品久久 | www.伊人 | 婷婷久久久久 | 自拍偷拍999 | 欧美大片一级 | 91福利小视频 | av天天堂| 国产一区二区三区免费 | 在线视频免费播放 | 夜夜涩 |