當我點擊UITextView中的某個位置時,我想要檢索顯示在該行的NSString的子字符串。如何在UITextView的特定位置計算NSString的NSRange
我有例如一個顯示字符串的UITextView,使用16行。當我點擊位置(200,150)時,我想要在該水龍頭上顯示UITextView的子字符串。
有關如何實現此目的的任何建議?
當我點擊UITextView中的某個位置時,我想要檢索顯示在該行的NSString的子字符串。如何在UITextView的特定位置計算NSString的NSRange
我有例如一個顯示字符串的UITextView,使用16行。當我點擊位置(200,150)時,我想要在該水龍頭上顯示UITextView的子字符串。
有關如何實現此目的的任何建議?
如果我正確理解你的問題,這是一個可能的解決方案。在您的視圖控制器中添加一個IBOutlet到UITextView,並確保您的視圖控制器實現了UITextViewDelegate。在將UITextView連接到InterfaceBuilder中的FileOwner時,請確保您也將UITextView的委託指向FileOwner。
@interface StackOverFlowViewController : UIViewController<UITextViewDelegate> {
IBOutlet UITextView *textView;
}
@end
然後在你的UIViewController實現文件中添加這個UITextViewDelegate方法。
- (void)textViewDidChangeSelection:(UITextView *)aTextView {
NSRange rangeOfSelection = textView.selectedRange;
NSString *selectedText = [textView.text substringWithRange:rangeOfSelection];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Selection Changed" message:selectedText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
然後每次在UITextView中進行選擇時,都會調用此方法。使用UITextView的selectedRange屬性來獲取用戶所做的NSRange。從那裏你可以從UITextView獲取文本並生成正確的子字符串。
我只是在textViewDidChangeSelection方法添加一個UIAlertView中顯示的子
您必須設置UITextView
都選擇和編輯。但是,當您選擇時,鍵盤會顯示出來,這會讓用戶感到陌生。我試圖在KeyboardDidShow
事件中隱藏鍵盤(通過resignFirstResponder),但NSRange
將不正確,尤其是當您滾動UITextView
並進行選擇時。如果您設置UITextView
可選但不可編輯,那麼您必須長按以獲取TextViewDidChangeSelection
事件,但鍵盤不會顯示,則NSRange
將是正確的。
後來,我發現了一個完美的方式來解決這個問題,將鍵盤移動到一個很遠的位置,所以你不需要長時間按壓,只需輕觸即可獲得準確的NSRange。這裏是代碼:
找到如何控制鍵盤:
//定義在公共區域 的UIView * systemKeyboard;
//觸摸textView將觸發事件,如果textView是可編輯和可選的。不再使用KeyboardDidShow事件
- (BOOL)textViewShouldBeginEditing:(UITextView )textView NSLog(@「textViewShouldBeginEditing」); (!systemKeyboard)UIWindow window1 = [UIApplication sharedApplication] .windows [1];對於(int i = 0; i < window1.subviews.count; i ++){ UIView * keyBoard1 = window1.subviews [i]; if([keyBoard1 isKindOfClass:NSClassFromString(@「UIInputSetContainerView」)]){ systemKeyboard = keyBoard1; //現在我們可以控制鍵盤位置 break; } } } CGRect rec1 = systemKeyboard.frame; systemKeyboard。frame = CGRectMake(2000,2000,rec1.size.width,rec1.size.height); 返回YES; }
在textViewDidChangeSelection事件獲取NSRange:
//觸摸的TextView將觸發事件,也 - (空)textViewDidChangeSelection:(UITextView的*)的TextView { 的NSLog(@ 「textViewDidChangeSelection」); NSRange範圍= [sermonTextView selectedRange]; }
回遷鍵盤在其他場合ShouldBeginEditing:
//必須的忙關閉鍵盤,例如,如果您有也將使用鍵盤上輸入搜索欄,你現在應該顯示鍵盤。 (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {({「searchBarShouldBeginEditing」);如果(systemKeyboard)CGRect rec1 = systemKeyboard.frame; systemKeyboard.frame = CGRectMake(0,0,rec1.size.width,rec1.size.height); //不需要[sermonTextView resignFirstResponder]; //不需要[searchBar1 becomeFirstResponder]; } ......... return YES; }
您是否在UITextView中選擇/高亮顯示文本? – aahrens 2010-11-23 19:15:30