Как рассчитать NSRange NSString в определенной позиции в UITextView - PullRequest
3 голосов
/ 14 августа 2010

Когда я нажимаю на определенную позицию в UITextView, я хочу получить подстроку строки NSString, которая показана в строке.

У меня есть, например, UITextView, который отображает строку, используя 16 строк.Когда я нажимаю на позицию (200, 150), я хочу подстроку, которая отображается UITextView на этом кране.

Есть предложения о том, как этого добиться?

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Если я правильно понимаю ваш вопрос, это возможное решение.В вашем viewcontroller добавьте IBOutlet к UITextView и убедитесь, что ваш viewcontroller реализует UITextViewDelegate.При подключении UITextView к FileOwner в InterfaceBuilder убедитесь, что вы также указываете делегат UITextView на FileOwner.

@interface StackOverFlowViewController : UIViewController<UITextViewDelegate> {

    IBOutlet UITextView *textView;
}
@end

Затем в файле реализации UIViewController добавьте этот метод UITextViewDelegate.1006 * Затем каждый раз, когда вы делаете выбор в UITextView, вызывается этот метод.Используйте свойство selectedRange UITextView, чтобы получить NSRange, созданный пользователем.Оттуда вы можете просто получить текст из UITextView и сгенерировать правильную подстроку.

Я просто добавил UIAlertView в метод textViewDidChangeSelection для отображения подстроки

0 голосов
/ 08 января 2015

Вы должны установить UITextView для выбора и редактирования. Однако клавиатура будет отображаться при выборе, что позволит пользователю чувствовать себя странно. Я пытался скрыть клавиатуру (с помощью resignFirstResponder) в событии KeyboardDidShow, но NSRange не будет корректным, особенно когда вы прокручиваете UITextView и выбираете. Если вы установили UITextView выбираемый, но не редактируемый, то для получения события TextViewDidChangeSelection необходимо нажать и удерживать клавишу, но клавиатура не будет отображаться, тогда NSRange будет правильным.

Позже я нашел идеальный способ решения этой проблемы, переместив клавиатуру в дальнее место, чтобы вам не нужно было долго нажимать, и вы можете получить точный NSRange одним касанием. Вот коды:

  1. узнать, как управлять клавиатурой:

    // определить в общей области UIView * systemKeyboard;

    // touch textView вызовет событие, если textView редактируемый и выбираемый. Больше не использовать событие KeyboardDidShow

    - (BOOL) textViewShouldBeginEditing: (UITextView ) textView { NSLog (@ "textViewShouldBeginEditing"); если (! systemKeyboard) { UIWindow window1 = [UIApplication sharedApplication] .windows [1]; for (int i = 0; i

  2. Получить NSRange в событии textViewDidChangeSelection:

    // touch textView также вызовет событие - (void) textViewDidChangeSelection: (UITextView *) textView { NSLog (@ "textViewDidChangeSelection"); NSRange range = [sermonTextView selectedRange]; }

  3. Переместить клавиатуру назад в других случаях, когда необходимо:

    // Вы должны закрывать клавиатуру где-нибудь, например, если у вас также есть строка поиска, которая будет использовать клавиатуру, и вы должны показать клавиатуру сейчас. - (BOOL) searchBarShouldBeginEditing: (UISearchBar *) searchBar { NSLog (@ "searchBarShouldBeginEditing"); если (systemKeyboard) { CGRect rec1 = systemKeyboard.frame; systemKeyboard.frame = CGRectMake (0, 0, rec1.size.width, rec1.size.height); // нет необходимости [sermonTextView resignFirstResponder]; // нет необходимости [searchBar1 intoFirstResponder]; } ......... вернуть ДА; }

...