Мешайте UITextView перейти, программно устанавливая текст

Официально Flyway не работает со Snowflake в данный момент (как вы можете видеть там https://github.com/flyway/flyway/pull/2274 ). В соответствии с этим обсуждением, похоже, существует совместимый с Snowflake форк, однако я бы не советовал делать это в производственной системе без тщательной проверки, но если вам действительно это нужно, возможно, стоит взглянуть.

Что касается интеграции Flyway с Git, вы можете интегрировать Flyway в процесс CI, потянув изображение Flyway Docker ( https://github.com/flyway/flyway-docker ) - или используя свой собственный image, если вы решили пойти на Snowflake-совместимый форк и запустить команду migrate для вашей целевой базы данных.

19
задан Cœur 3 July 2017 в 17:51
поделиться

5 ответов

Взгляните на UITextViewDelegate, я считаю, что метод textViewDidChangeSelection может позволить вам делать то, что вам нужно.

1
ответ дан 30 November 2019 в 03:03
поделиться

Не такое изящное решение, но оно работает, кого это волнует:

- (IBAction)changeTextProgrammaticaly{
     myTextView.text = @"Some text";
     [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(rewindOffset) userInfo:nil repeats:NO];
}

- (void)rewindOffset{
    [myTextView setContentOffset:CGPointMake(0,0) animated: NO];
}
0
ответ дан 30 November 2019 в 03:03
поделиться

Если вы используете iPhone 3.0 или новее, вы можете решить эту проблему:

textView.scrollEnabled = NO;

//You should know where the cursor will be(if you update your text by appending/inserting/deleting you can know the selected range) so keep it in a NSRange variable.

Then update text:
textView.text = yourText;

textView.scrollEnabled = YES;
textView.selectedRange = range;//you keep before

Теперь он должен работать (больше никаких прыжков)

С уважением {{ 1}} Меир Ассаяг

14
ответ дан 30 November 2019 в 03:03
поделиться

Ни одно из предложенных решений не сработало для меня. -setContentOffset:animated: срабатывает на -setText: 3 раза с анимированным ДА и contentOffset конца (минус 8pt margin по умолчанию UITextView). Я обернул -setText: в guard:

textView.contentOffsetAnimatedCallsDisabled = YES;
textView.text = text;
textView.contentOffsetAnimatedCallsDisabled = NO;

В подклассе UITextView в -setContentOffset:animated: поместил

if (contentOffsetAnimatedCallsDisabled) return; // early return

среди прочей вашей логики. Не забудьте про супервызов. Это работает.

Raphael

3
ответ дан 30 November 2019 в 03:03
поделиться

Основываясь на предложении Меира, вот код, который удаляет выделение программно (да, я знаю, что есть кнопка меню выбора, которая тоже делает это, но я делаю что-то немного странное) без прокрутки текста Посмотреть.

NSRange selectedRange = textView.selectedRange;
textView.scrollEnabled = NO;
// I'm deleting text. Replace this line with whatever insertions/changes you want
textView.text = [textView.text
                stringByReplacingCharactersInRange:selectedRange withString:@""];
selectedRange.length = 0;
// If you're inserting text, you might want to increment selectedRange.location to be
// after the text you inserted
textView.selectedRange = selectedRange;
textView.scrollEnabled = YES;
8
ответ дан 30 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: