原文地址請保留http://www.survivalescaperooms.com/rossoneri/p/4809692.html
很奇怪的問題,一個UITextView放進UITableView中作為一個Cell,首先設置選中高亮:
[self setSelectionStyle:UITableViewCellSelectionStyleBlue];這里說一點,在ipAD中,UITableView的選中高亮好像永遠是灰色的。
然后點擊UITextView進入編輯狀態時,鍵盤會彈出,也可以輸入內容,然而不顯示光標。
好了,有人說背景色和光標一致導致看不見,然而我改了光標顏色以及背景色還是沒什么卵用。
好了,又有人說把選中高亮去掉就行了,然而我若不用高亮我干嘛還要研究這個問題。
折騰了好久,看到一個這樣的答案link
Cell stopped to hide cursor, when i set.
cell.selectionStyle = UITableViewCellSelectionStyleNone;But after that, cell also stopped use selectedBackgroundView. So I set my image to highlighted state of backgroundView.
cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"input_up.png"] highlightedImage:[UIImage imageNamed:@"input_up_act.png"]] autorelease];And switched image in setSelected:animated:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if (selected && ![textView isFirstResponder]) { [textView setUserInteractionEnabled:YES]; [textView becomeFirstResponder]; } else { [textView resignFirstResponder]; [textView setUserInteractionEnabled:NO]; } [(UIImageView *)self.backgroundView setHighlighted:selected];}這個思路很好,就是不設置系統選中高亮,我們自己寫一個背景,然后自己實現高亮狀態。
但是我用的背景圖是自動拉伸的,設置以后,縱向拖動cell會導致背景圖變成拉伸前的原圖,效果很糟糕。而且有時候點擊cell也會直接加載原圖,需要reload cell再設置selected才有好的效果。所以我試著選擇設置背景色,結果效果很好。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{ [super setSelected:selected animated:animated]; [self setSelectionStyle:UITableViewCellSelectionStyleNone]; if (selected) { [self setBackgroundColor:[UIColor colorWithRed:0x79 / 255.f green:0xD8 / 255.f blue:0xFA / 255.f alpha:1.f]]; } else { [self setBackgroundColor:[UIColor whiteColor]]; }}好了,解決了,有人說這種光標不顯示的現象是系統的問題。另外我試了一下,同樣的設置,如果把UITextView換成UITextField,就會有光標。崩潰了。。。算了,實在找不出原因了,暫且把鍋甩給系統好了。
最后總結,以后如果一個效果找不到系統的實現方法,我們就自己實現好了。
新聞熱點
疑難解答