2013-02-23 48 views
0

我需要爲UITextField創建自定義清除按鈕(因爲我的配色方案)。我使用下面的代碼(其中類是UITextField派生類):如何停止UIButton(用作自定義清除按鈕)將UITextField作爲第一響應者辭職?

UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
[clearButton setImage:[UIImage imageNamed:@"ClearButton.png"] forState:UIControlStateNormal]; 
[self setRightView:clearButton]; 
[self setRightViewMode:UITextFieldViewModeNever]; 
[clearButton addTarget:self action:@selector(clear:) forControlEvents:UIControlEventTouchUpInside]; 

這很好,主要是。問題是單擊清除按鈕會導致UITextField退出第一響應者狀態(即鍵盤消失)。我希望UITextField保持焦點。

我試着在清除按鈕的動作中恢復第一個響應者狀態,但是,如果UITextField在UITableView中並且被滾動 - 這會在鍵盤關閉和打開時在表中引起一些不希望的滾動。

我可以使用UIImageView而不是UIButton,但是當按鈕被點擊時,我沒有看到可視的「脈衝」。

那麼,有沒有辦法使UITextField在按下按鈕時保留第一響應者狀態?

我正在開發使用的是iOS 6的iPhone應用程序

[注:在「明確表示:」行動的目標只是清空文本字段,但是,無論如何,即使我沒有設置出現我的問題目標。]

回答

1

找到了原因。我有一個手勢識別器,用於在用戶點擊「背景」時處理關閉鍵盤。當用戶單擊文本字段上的關閉按鈕時,該功能被激活。

我最終實現:

gestureRecognizer:shouldReceiveTouch: 

濾除清除按鈕。

1

也許我不明白你的問題,但我認爲問題可能在於,你想讓你的tableView上看不到的textField的第一響應者。這不可能發生。你必須先秀行包含您的文本框,比你可以把它作爲第一個響應:

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:yourIndex inSection:0]; 
[self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

比:

[self.textField becomeFirstResponder]; 
+0

感謝您的回覆。文本字段在這一點上是絕對可見的。必須讓我能夠點擊清除按鈕。 – dommer 2013-02-23 19:39:17