2016-06-05 3 views
1

Как ограничить минимальное положение курсора быстрым, используя метод caretRectForPosition или любым другим способом. Предположим, у меня есть текстовое изображение с некоторым контентом, и если пользователь пытается переместить курсор до третьей позиции, он не должен двигаться. Как это возможно? Прочитайте несколько статей об этом, но не отвечайте на мою проблему.Как ограничить позицию курсора быстрым?

ответ

3

Принимаю предположение, что, ограничивая минимальное положение курсора, вы подразумеваете, что из строки примера: «Это строка примера» - вы хотите убедиться, что выбор, сделанный пользователем, находится в пределах определенного NSRange?

UITextView имеет протокол делегата, который включает в себя метод, называемый при изменении выбора:

- (void)textViewDidChangeSelection:(UITextView *)textView 

Вы могли бы реализовать делегат, прослушивающие этого метода, а затем сделать что-то вроде:

// Swift

func textViewDidChangeSelection(textView: UITextView) { 
    let minLocation = 3 
    let currentRange = textView.selectedRange 
    if (currentRange.location < minLocation) { 
     let lengthDelta = (minLocation - currentRange.location) 
     //Minus the number of characters moved so the end point of the selection does not change. 
     let newRange = NSMakeRange(minLocation, currentRange.length - lengthDelta); 
     //Should use UITextInput protocol 
     textView.selectedRange = newRange; 
    } 
} 

// Objective-C

- (void)textViewDidChangeSelection:(UITextView *)textView 
{ 
    NSUInteger minLocation = 3;//your value here obviously 
    NSRange currentRange = textView.selectedRange; 
    if (currentRange.location < minLocation) { 
     NSUInteger lengthDelta = (minLocation - currentRange.location); 
     //Minus the number of characters moved so the end point of the selection does not change. 
     NSRange newRange = NSMakeRange(minLocation, currentRange.length - lengthDelta); 
     //Should use UITextInput protocol 
     UITextPosition *location = [textView positionFromPosition:[textView beginningOfDocument] offset: newRange.location]; 
     UITextPosition *length = [textView positionFromPosition:location offset:newRange.length]; 
     [textView setSelectedTextRange:[textView textRangeFromPosition:location toPosition:length]]; 
    } 
} 

Вы также можете использовать подобный подход наложить максимальный выбор/длину и т.д.

Это будет означать, что на струне образцом ранее не смог бы выбрать любого из «Thi» в начале строки ,

Более подробная информация о UITextView делегате здесь: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextViewDelegate_Protocol/

+0

, например, если строка «Это строка». Курсор не должен перемещаться перед буквой «i» в подстроке «This», даже если пользователь пытается ее переместить. – coolly

+0

Выше это сделает - но не включите «i» в выделение. Нужно было бы изменить minLocation на MAX (0, (x - 1)), чтобы включить i, где x - это минимальное местоположение. –

+0

он работал красиво, было интересно, есть ли другой способ сделать это? @neuronical – coolly

Смежные вопросы