欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IOS 開發(fā)之UITextField的光標操作擴展

 更新時間:2017年06月27日 11:14:45   投稿:lqh  
這篇文章主要介紹了IOS 開發(fā)之UITextField的光標操作擴展的相關資料,需要的朋友可以參考下

IOS 開發(fā)之UITextField的光標操作擴展

簡介

在iOS開發(fā)中,有時候需要完全自主的定義鍵盤,用于完整的單詞輸入,例如計算機應用中,需要一次性的輸入sin(,在移動光標時要完整的跳過sin(,在刪除時也要完整的刪除,這就需要對光標的位置進行精確控制,而ios并沒有相關的函數(shù)可以直接操作光標,只給出了選擇某個區(qū)域的功能,本文將介紹基于區(qū)域選擇設計的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:方法可以設置選取范圍,我們只要設置一個選取單個字符的范圍,即可移動光標而不選中。

關鍵屬性

// 內容為[start,end),無論是否有選取區(qū)域,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;
// 創(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{

  // 先把光標移動到文首,然后再調用上面實現(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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • NSString屬性何時用strong何時用copy?

    NSString屬性何時用strong何時用copy?

    相信各位iOS開發(fā)者們都考慮過這個問題,平時寫NSString的屬性時都用copy,那strong要何時用呢?下面這篇文章就來看一下什么時候應該用copy,什么時候應該用strong。有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • iOS直播類APP開發(fā)流程解析

    iOS直播類APP開發(fā)流程解析

    這篇文章主要為大家詳細解析了iOS直播類APP開發(fā)流程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解

    iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解

    這篇文章主要為大家介紹了iOS NSCache和NSUrlCache緩存類實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • iOS應用中使用AsyncSocket庫處理Socket通信的用法講解

    iOS應用中使用AsyncSocket庫處理Socket通信的用法講解

    這篇文章主要介紹了iOS應用中使用AsyncSocket庫處理Socket通信的用法講解,AsyncSocket同時支持TCP和UDP,文中展示了其建立斷開連接及發(fā)送接收消息的操作,very好用,需要的朋友可以參考下
    2016-05-05
  • 詳細談談iOS字符串翻轉

    詳細談談iOS字符串翻轉

    字符串翻轉是我們在學習算法的時候經常會遇到的一個基礎算題,下面這篇文章主要給大家詳解介紹了關于iOS字符串翻轉的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-07-07
  • iOS實現(xiàn)截取字符串中漢字功能

    iOS實現(xiàn)截取字符串中漢字功能

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)截取字符串中漢字功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iOS實現(xiàn)UIScrollView的無限輪播功能(原理)詳解

    iOS實現(xiàn)UIScrollView的無限輪播功能(原理)詳解

    在現(xiàn)在的一些App中常常見到圖片輪播器,一般用于展示廣告、新聞等數(shù)據(jù),下面這篇文章主要給大家介紹了關于iOS實現(xiàn)UIScrollView的無限輪播功能(原理)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • 詳解iOS應用中播放本地視頻以及選取本地音頻的組件用法

    詳解iOS應用中播放本地視頻以及選取本地音頻的組件用法

    這里來為大家詳解iOS應用中播放本地視頻以及選取本地音頻的組件用法,分別使用MPMoviePlayerControlle和MPMediaPickerController來實現(xiàn),兩個都是MediaPlayer.framework中的多媒體組件,所以我們放到一起來講.
    2016-06-06
  • iOS 水波紋動畫的實現(xiàn)效果

    iOS 水波紋動畫的實現(xiàn)效果

    本篇文章主要介紹了iOS 水波紋的實現(xiàn)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 支持Xcode10和適配iPhone XS Max、iPhone XR的方法

    支持Xcode10和適配iPhone XS Max、iPhone XR的方法

    這篇文章主要介紹了支持Xcode10和適配iPhone XS Max、iPhone XR的方法,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10

最新評論