2009-11-10 18 views
12

我的問題是編程設定的UITextView 的選擇的selectedRange的文字,但沒有顯示在視覺上表示它的選擇。這聽起來像是OS 3.0/3.1中的一個錯誤嗎?更重要的是,任何解決方案或建議讓選擇顯示? (示例項目鏈接在消息的底部)的UITextView時的selectedRange設置編程

我怎麼知道它被選中,因爲我沒有獲得視覺反饋?兩個原因:

  1. 無閃爍的光標
  2. 輕敲鍵盤上的任意鍵刪除現有的在選擇範圍內的文本。

我在viewcontroller中有一個UITextView允許編輯用戶可更改的值。編輯器控制器在表格行上接收到雙擊時打開,或者用戶輕敲一行上的詳細信息顯示按鈕。該視圖 - 控制通過presentModalViewController到達,並在編輯器VC的viewWillAppear中的方法,我發起了鍵盤與[self.textView becomeFirstResponder];

有時我想開始與所選的TextView的全部內容編輯器,使用戶可以簡單地開始打字,它會刪除現有內容(這是因爲我使用默認標題創建了新項目,所以幾乎可以肯定用戶將首先刪除編輯器文本字段的全部內容,然後鍵入它們的標題)。

一些我已經嘗試過的事情:

  1. 設置在viewDidAppear所選擇的範圍內(而不是在除了textViewDidBeginEditing這樣做)。
  2. 用其中的文本替換_textView.text,然後應用selectedRange(在textViewDidBeginEditing)...思考也許如果我正在處理框架錯誤,這可能會解決它。
  3. [[_textView webView] selectAll];(private api)。相同的行爲,文本被選中而沒有視覺反饋。
  4. 發送_textView setNeedsDisplay和setNeedsLayout。
  5. 使用performSelector ... afterDelay來設置selectedRange,以便它在退出textViewDidBeginEditing之後發生。

裁判上S.O:Herehere

// UITextFieldDelegate Methods... 
- (void)textViewDidBeginEditing:(UITextView *)_textView 
{ 
NSInteger len = [_textView.text length]; 

if(self.selectInitialText){ 
    //NOTE: this is not working as expected. Indeed the text is 
    // selected but the highlighting of the text isn't showing. 
    _textView.selectedRange = NSMakeRange(0,len); 
} 
} 

- 編輯 -
這裏提交給蘋果BugReporter示例項目。Download BugReport_7380723 sample project

附加信息:

在創建和使用示例項目提交玩,我發現了兩件事情:

  • 時,有選定文本,但顯示沒有亮點,挖掘一些按鍵,然後「搖動撤消「並恢復原始文本,但突出顯示IS

  • 如果手動使TextView的選擇,然後點擊「全選」按鈕[指上面鏈接示例項目],所有文本被選中顯示器的亮點正常。

回答

0

解決方法:您似乎需要的是UITextView佔位符功能。這當然不存在。但是,有一些解決方法here

+0

感謝您的解決方法建議。但在這種情況下它確實不是佔位符。我有一個具有特定可編輯「標題」的實體;當字段「打開」進行編輯時,佔位符將消失。我的文本應該保留,但表示它已被選中,因此鍵盤操作將取代選擇,或者他們需要點擊字段以殺死選擇。此外,任何種類的支持選擇的小部件都應該指明選擇的狀態,所以這可能是一個錯誤(我在這裏發佈後立即提交了一個錯誤報告)。我更感興趣的是可以讓選擇顯示的解決方法。謝謝。 – wkw 2009-11-10 18:32:28

4

我會回答我自己的問題,並在稍後有更多信息時更新它(或者如果別人找到適合的工作,我會很樂意將支票移到他們的答案上) 。我提交了一份關於蘋果的錯誤報告,在提交示例代碼之後,它就處於打開狀態。我非常有信心這是一個錯誤,所以當我得到他們的迴應時,我會在這裏傳遞。

+2

有沒有聽過? :) – antsyawn 2011-07-21 01:41:45

+0

你聽到了嗎? – Legolas 2012-04-13 15:56:37

+0

我正在選擇@ Zac的答案,因爲至少有一個人似乎已經證實了它,但我沒有機會自己去測試。 – wkw 2012-04-27 14:58:57

16

在textView上以編程方式設置選擇之前,只需調用select使其以可視方式顯示新選擇。例如:

[textView select:self]; 
textView.selectedRange = newSelectedRange; 
+0

這個工程。在setSelectedRange之前調用select使藍色背景和「lollypops」可見。省略選擇呼叫將導致選定的文本,但沒有選擇指示符 – 2010-07-28 07:23:22

1

突然遇到這個問題。我有同樣的問題,直到我檢查NSObject的聲明頭。他們已經提供了一個名爲selectAll的功能:

@interface NSObject(UIResponderStandardEditActions) // these methods are not implemented in NSObject 

- (void)cut:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)copy:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)paste:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)select:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)selectAll:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)delete:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); 

@end