我正在篩選剛剛開始的新工作中的預先存在的代碼,並且我遇到的第一個錯誤之一是連接到UITableView
子類的搜索欄,該子類在每次擊鍵之後都會關閉鍵盤。經過一番搜索,我發現this SO question,似乎我找到了我的答案:應用程序正在使用reloadData
刷新每次擊鍵後的結果,並且重新載入時調用了resignFirstResponder
並關閉了鍵盤。令人沮喪,但解釋和理解。UITableView在一個地方解除了reloadData上的鍵盤,但在另一個地方沒有?
但後來我的老闆指出我們在應用程序的其他地方使用幾乎完全相同的代碼,並且它完美地工作。那怎麼可能?我發現自己處於不尋常的位置,需要解釋爲什麼某些東西可以工作,因爲上面的鏈接表明在reloadData
期間解除鍵盤是「正常」行爲。
下面是兩個ViewController的相關方法,每個ViewController都是從相同的自定義UITableView
進行分類的。 (這些方法已經簡化了,但不同的行爲依然存在。)我認爲它的一部分必須是埋在兩個亞類之間的差異,但如果問題存在,並且它不會在任何地方被覆蓋,那意味着子類是不相關的?
查找視圖:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Lookup Reloaded");
}
搜索查看:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.tableView reloadData];
NSLog(@"Search Reloaded");
}
正如你所看到的,它們是相同的。在每次按鍵之後,兩者都被成功地調用,然而前者解除鍵盤而後者不解除鍵盤。
這些視圖控制器中的每一個都超過一千行,所以我很難縮小可能導致不同行爲的因素。能理解FirstResponders和TableView重載的人能幫我提供一些關於看哪裏的線索嗎?這似乎是一個相當簡單的過程(按鍵>該方法被稱爲>重新加載表>鍵盤在過程中被解散)沒有太多空間來改變該行爲,但顯然有一種方法來阻止最後一步,因爲搜索視圖已經在做它。
任何想法,我應該集中我的搜索找出原因?
您的表是否在其他情況下重新加載鍵盤沒有解僱? – nikhil84 2014-10-10 06:14:21