scrollRangeToVisible: как перейти к началу UITextView

Головная боль новичка: я пытаюсь прокрутить до самого верха своего UITextView, как только клавиатура будет закрыта. Я пытался получить ответ отсюда, но, боюсь, это не помогло много.

Я думал, что сделаю это с помощью scrollRectToVisible, но ничего не происходит. Затем я подумал, что мне стоит попробовать scrollRangeToVisible, но это привело к сбою моего приложения ... Я уверен, что сделал что-то очень неприятное и неправильное. Буду очень рад, если кто-нибудь поможет:

- (IBAction)hideKeyboard:(id)sender {

//[textView scrollRectToVisible:CGRectMake(0, 0, 0, 0) animated:YES];

NSRange range = NSMakeRange(textView.text.length - (textView.text.length+1),1);
[textView scrollRangeToVisible:range];

textView.scrollEnabled = NO;
[textView resignFirstResponder];}

РЕДАКТИРОВАТЬ:

обновленный код для всех, кто сталкивается с подобной проблемой:

- (IBAction)hideKeyboard:(id)sender {

//textView.scrollEnabled = NO;
[textView resignFirstResponder];

NSRange range = NSMakeRange(0,1);
[textView scrollRangeToVisible:range];

}


person n.evermind    schedule 11.03.2011    source источник


Ответы (2)


Создаваемый вами диапазон начинается с -1! Создать свой ассортимент можно так, проще:

NSRange range = NSMakeRange(0, 1);

Этот диапазон начинается с индекса 0 (первый символ) и занимает более 1 символа.

person James Bedford    schedule 11.03.2011
comment
Спасибо за быстрый ответ. Теперь он больше не падает, но на самом деле он не прокручивается до самого начала, а скорее помещает начало UITextView в середину моего экрана, то есть @ pixel 250 или около того. - person n.evermind; 11.03.2011
comment
Извините, решил сам. Мне нужно вызвать scrollRangeToVisible ПОСЛЕ отставки клавиатуры. Извините за беспокойство. - person n.evermind; 11.03.2011
comment
Потрясающий! Рад, что вы это разобрали. :) - person James Bedford; 11.03.2011
comment
Боюсь, но только что заметил еще один баг с этим. Если я ввожу что-то в свой UITextView, а затем отказываюсь от клавиатуры, все в порядке (прокрутка происходит, и я счастлив). Однако, если я ничего не делаю со своим UITextView и пытаюсь отказаться от клавиатуры, приложение ВЫКЛЮЧАЕТСЯ. Ошибка явно связана с методом scrollRangeToVisible, потому что, если я закомментирую это, все в порядке (без сбоев, но и без прокрутки). Возможно, я должен инициировать диапазон? или textView? - person n.evermind; 11.03.2011
comment
Может быть, не лучше было бы просто прокрутить до фиксированной точки вместо первого символа, который занимает один символ? - person n.evermind; 11.03.2011

Я нашел этот ответ о прокрутке textView вверху, раньше здесь, на этом форуме, я не нашел его сейчас. Но это был ответ: вы просто используете этот метод, чтобы остановить прокрутку:

- (void)killScroll :(UIScrollView*)scrollView 
{
    CGPoint offset = scrollView.contentOffset;
    offset.x -= 1.0;
    offset.y -= 1.0;
    [scrollView setContentOffset:offset animated:NO];
    offset.x += 1.0;
    offset.y += 1.0;
    [scrollView setContentOffset:offset animated:NO];
}

и после его вызова вы используете знаменитый метод:

[yourTextView scrollsToTop];
person Mejdi Lassidi    schedule 11.03.2011