2015-09-27 2 views
1

У меня есть UITextField. При первом щелчке я хочу select all текст программно. Поэтому я вызвал [textField selectAll:nil] в методе делегата textFieldDidBeginEditing:. Когда я сделаю следующий щелчок, я хочу, чтобы он стал нормальным режимом редактирования. Как реализовать это программно ?.Как сделать UITextField сначала выбрать все, а затем отредактировать программно?

Заранее спасибо.

+0

Просто для подтверждения, на данный момент требуется два крана, не так ли? Один коснитесь, чтобы показать popover, затем еще один, чтобы отменить выбор? – Sheamus

+0

Да, это требует двух кранов. Но, выбирая все, вам не нужно показывать поп. –

ответ

2

Это предотвращает появление popover, когда пользователь нажимает на выделенный текст.

Чтобы разрешить первый кран всегда выбрать весь текст, и есть второй кран Deselect, сохранить текущий код в методе textFieldDidBeginEditing и расширить UITextField переопределить canPerformAction:withSender:, чтобы предотвратить поповер появляться, например, так:

UITextField Подкласс

- (BOOL) canPerformAction:(SEL)action withSender:(id)sender { 
    /* Prevent action popovers from showing up */ 

    if (action == @selector(paste:) 
     || action == @selector(cut:) 
     || action == @selector(copy:) 
     || action == @selector(select:) 
     || action == @selector(selectAll:) 
     || action == @selector(delete:) 
     || action == @selector(_define:) 
     || action == @selector(_promptForReplace:) 
     || action == @selector(_share:)) 
    { 
     //Get the current selection range 
     UITextRange *selectedRange = [self selectedTextRange]; 

     //Range with cursor at the end, and selecting nothing 
     UITextRange *newRange = [self textRangeFromPosition:selectedRange.end toPosition:selectedRange.end]; 

     //Set the new range 
     [self setSelectedTextRange:newRange]; 

     return NO; 
    } else { 
     //Handle other actions? 
    } 

    return [super canPerformAction:action withSender:sender]; 
} 

Методы UITextFieldDelegate

//Select the text when text field receives focus 
- (void) textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [textField selectAll:nil]; 
} 

//Hide the keyboard when the keyboard "Done" button is pressed 
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 

    return TRUE; 
} 

Надеюсь, что это поможет!

+0

Не работает. Второй ответ не отменяет выбор UITextField. –

+0

В чем версия iOS? Это работало для меня на iOS 9. – Sheamus

+0

Я работаю только с версией iOS 9. –