日韩性视频-久久久蜜桃-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的光标操作扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色片子免费看 | 亚洲黄色成人 | 韩国精品一区二区三区 | 蜜臀久久99精品久久久久久宅男 | 天天干天天操天天操 | 成人深夜福利视频 | 一区二区精品 | 日本肉体xxxⅹ裸体交 | k8经典成人理伦片 | 白白色在线观看 | 亚洲视频五区 | 黄色网炮 | 大香依人 | 爱情岛黄色 | 欧美 日韩 国产 成人 在线 91 | 欧美做爰爽爽爽爽爽爽 | 国产农村老头老太视频 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 熟女少妇一区二区 | 能看的黄色网址 | 国产在线自 | 久久wwww | x88av在线| 午夜一区在线 | 欧美xxxx8888| 少妇淫片 | 在线免费播放 | 天天舔天天操 | 天堂8在线视频 | 久草欧美视频 | 九九精品在线视频 | www.555国产精品免费 | 久久只有这里有精品 | 日韩一区二区精品视频 | 欧美一线高本道 | 成人综合婷婷国产精品久久 | 又黄又爽网站 | 日韩在线中文字幕 | 午夜老湿机 | 免费日本黄色片 | 91久久精品国产91性色tv | 久操久操久操 | 国产精品123区 | 狠狠干女人 | 又色又爽又黄无遮挡的免费视频 | 日韩欧美有码 | 成年人视频网 | 欧美午夜精品久久久久免费视 | 大尺度av在线 | 国产三级日本三级在线播放 | 白丝美女喷水 | 三级成人 | 69午夜 | 97毛片| 亚洲图片欧美视频 | 污污在线观看视频 | 肥老熟妇伦子伦456视频 | 久久精品一区二区三区不卡牛牛 | 婷婷深爱五月 | 亚洲男人天堂电影 | 人妻精品久久久久中文字幕69 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 香蕉a| 精品国产一级久久 | 一本黄色片 | av集中营 | 天天色天天干天天 | 欧美一区二区在线视频观看 | 丝袜性爱视频 | 黄色网www | 亚洲国产小视频 | 久久久午夜影院 | www狠狠爱| 欧美日韩欧美日韩在线观看视频 | 国产精品日韩电影 | аⅴ资源中文在线天堂 | 熟妇熟女乱妇乱女网站 | 午夜视频黄色 | 婷婷伊人综合 | www.男人天堂.com | 性激烈视频在线观看 | 日韩在线中文字幕视频 | 色婷婷久久五月综合成人 | www.白白色 | 日本不卡一二 | 国产黄a三级三级看三级 | 西西4444www大胆无视频 | 麻豆国产一区二区三区四区 | 翔田千里一区 | 999久久久精品 | 超碰p | av鲁丝一区鲁丝二区鲁丝三区 | 久久午夜免费视频 | 亚洲精品成人电影 | 欧美国产不卡 | 色一情一乱一伦一区二区三区 | 一区二区三区在线免费观看视频 | 精品国产乱码久久久久久久软件 | 日韩久久一区二区三区 |