内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

IOS中如何實現(xiàn)UITextField的光標操作擴展-創(chuàng)新互聯(lián)

小編給大家分享一下IOS中如何實現(xiàn)UITextField的光標操作擴展,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、撫順網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為撫順等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

簡介

在iOS開發(fā)中,有時候需要完全自主的定義鍵盤,用于完整的單詞輸入,例如計算機應(yīng)用中,需要一次性的輸入sin(,在移動光標時要完整的跳過sin(,在刪除時也要完整的刪除,這就需要對光標的位置進行精確控制,而ios并沒有相關(guān)的函數(shù)可以直接操作光標,只給出了選擇某個區(qū)域的功能,本文將介紹基于區(qū)域選擇設(shè)計的UITextField擴展,用于獲取光標位置以及移動光標。

實現(xiàn)原理

光標位置的獲取

在textField中,有一個屬性稱之為selectedTextRange,這個屬性為UITextRange類型,包含[start,end)兩個值,通過實驗我們可以發(fā)現(xiàn),在沒有文字被選取時,start代表當前光標的位置,而end=0;當有區(qū)域被選擇時,start和end分別是選擇的頭和尾的光標位置,從0開始,并且不包含end,例如選擇了0~3的位置,則start=0,end=4。

光標的移動

通過setSelectedTextRange:方法可以設(shè)置選取范圍,我們只要設(shè)置一個選取單個字符的范圍,即可移動光標而不選中。

關(guān)鍵屬性

// 內(nèi)容為[start,end),無論是否有選取區(qū)域,start都描述了光標的位置。
@property (nullable, readwrite, copy) UITextRange *selectedTextRange;
// 文首和文尾的位置
@property (nonatomic, readonly) UITextPosition *beginningOfDocument;
@property (nonatomic, readonly) UITextPosition *endOfDocument;

關(guān)鍵方法

// 獲取以from為基準的to的偏移,例如abcde,光標在c后,則光標相對文尾的偏移為-2。
- (NSInteger)offsetFromPosition:(UITextPosition *)from toPosition:(UITextPosition *)toPosition;
// 獲取以from為基準偏移offset的光標位置。
- (nullable UITextPosition *)positionFromPosition:(UITextPosition *)position offset:(NSInteger)offset;
// 創(chuàng)建一個UITextRange
- (nullable UITextRange *)textRangeFromPosition:(UITextPosition *)fromPosition toPosition:(UITextPosition *)toPosition;

具體實現(xiàn)

下面的代碼為UITextField創(chuàng)建了一個分類(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{

  // 基于文首計算出到光標的偏移數(shù)值。
  return [self offsetFromPosition:self.beginningOfDocument toPosition:self.selectedTextRange.start];

}

- (void)makeOffset:(NSInteger)offset{

  // 實現(xiàn)原理是先獲取一個基于文尾的偏移,然后加上要施加的偏移,再重新根據(jù)文尾計算位置,最后利用選取來實現(xiàn)光標定位。
  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{

  // 先把光標移動到文首,然后再調(diào)用上面實現(xiàn)的偏移函數(shù)。
  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

看完了這篇文章,相信你對“IOS中如何實現(xiàn)UITextField的光標操作擴展”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:IOS中如何實現(xiàn)UITextField的光標操作擴展-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article2/doedic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站建設(shè)、電子商務(wù)軟件開發(fā)、外貿(mào)建站、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
济南市| 昭平县| 开鲁县| 垫江县| 大新县| 陇川县| 通山县| 神池县| 衡山县| 万载县| 赤峰市| 青神县| 叙永县| 本溪| 恩平市| 宁都县| 革吉县| 乌鲁木齐市| 新余市| 晋中市| 巴南区| 松溪县| 南溪县| 武隆县| 台东市| 新巴尔虎右旗| 兴业县| 江阴市| 广灵县| 搜索| 三亚市| 灵宝市| 河曲县| 保康县| 福海县| 万荣县| 武陟县| 正阳县| 隆德县| 化隆| 沽源县|