iOS UITextField 光標控制

本文待完善.......

在平時開發中會處理一些複製數字到文本框中,需要控制光標的位置,代碼如下,需要用到的童鞋可以看下,親測可用

//更新光標位置
- (void)updateLocationAfterCopyWithTextField:(UITextField *)textField offset:(NSInteger)offset {
    
    NSRange currentRange = [self selectedRangeWithTextField:textField];
    if (currentRange.location < offset) {
        offset = currentRange.location;
    }
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //必須加延遲,否則無法更新光標位置
        [self setSelectedRange:NSMakeRange(offset, 0) textField:textField];
    });
}

#pragma mark - Zachary - 獲取&設置光標位置
- (NSRange)selectedRangeWithTextField:(UITextField *)textField {
    
    NSInteger location = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];
    
    NSInteger length = [textField offsetFromPosition:textField.selectedTextRange.start toPosition:textField.selectedTextRange.end];
    
    return NSMakeRange(location, length);
}

- (void)setSelectedRange:(NSRange)selectedRange textField:(UITextField *)textField {
    //beginningOfDocument 內容啓始位置
    UITextPosition *startPosition = [textField positionFromPosition:textField.beginningOfDocument offset:selectedRange.location];
    //selectedRange.length 選中的
    UITextPosition *endPosition = [textField positionFromPosition:textField.beginningOfDocument offset:selectedRange.location + selectedRange.length];
    
    UITextRange *selectedTextRange = [textField textRangeFromPosition:startPosition toPosition:endPosition];
    [textField setSelectedTextRange:selectedTextRange];
}

使用的時候,直接調用

if (textField.tag == 1002 && string.length > 5) { //郵編  
    string =  [string substringToIndex:6];
    [self updateLocationAfterCopyWithTextField:textField offset:6];
 }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章