2009-08-20 47 views
2

我正在使用tableView與自定義單元格。當我想使用navigationController的pushViewController函數顯示另一個視圖時,我循環訪問textfields並在其上調用resignFirstResponder。但resignFirstResponder只在顯示文本字段時才起作用,所以我首先滾動到頁面的頂部。這是代碼:tableView frame.origin問題後textField resignFirstResponder自定義tableViewCell

NSIndexPath *topIndexPath; 
topIndexPath = [[NSIndexPath indexPathWithIndex:0] indexPathByAddingIndex:0]; 
[self.tableView scrollToRowAtIndexPath:topIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 

[[self textFieldForRow:0] resignFirstResponder]; 
[[self textFieldForRow:1] resignFirstResponder]; 
[[self textFieldForRow:2] resignFirstResponder]; 
[[self textFieldForRow:3] resignFirstResponder]; 

這工作,但在這之後我的tableView有它的起源一些奇怪的問題。我試圖將它的超級本源設置爲0,但這沒有幫助。

這是問題的一個截圖:​​

正如你所看到的,我的tableview太大,到達底部時滾動條被卡在取景當中。

對不起,我的英語,我希望你能理解我,

提前感謝!

Hans

回答

2

其實很簡單。只要把你resignFirstResponder在-viewWillDisappear

編輯:這是更好的,少哈克,我已將此添加到我的課,和它的工作:

編輯2:看起來使用前面的代碼時,你的應用程序將會被拒絕。這裏是一個更新的公共API版本:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [self.view findAndResignFirstResponder]; 
} 

和:

@implementation UIView (FindAndResignFirstResponder) 
- (BOOL)findAndResignFirstResponder 
{ 
    if (self.isFirstResponder) { 
     [self resignFirstResponder]; 
     return YES;  
    } 
    for (UIView *subView in self.subviews) { 
     if ([subView findAndResignFirstResponder]) 
      return YES; 
    } 
    return NO; 
} 
@end 

(來源:Get the current first responder without using a private API

+0

由於使用此方法,某人的應用已從應用商店中拒絕。如果你有興趣,它在這個線程中。 http://stackoverflow.com/questions/1823317/how-do-i-legally-get-the-current-first-responder-on-the-screen-on-an-iphone – 2010-02-05 16:42:19

+0

非常感謝你:)改變了碼。 – HansPinckaers 2010-02-22 19:48:00

0

我會解決你的其他問題。我想象當你說你在屏幕上顯示其他文本字段時不能調用「resignFirstResponder」,你的意思是說有一個崩潰?

如果是這樣,那是因爲屏幕單元不存在,因此文本域也不見了。他們被回收(所以他們可以出列新的細胞)。

簡單的解決方案是僅在屏幕上的textField上調用resignFirstResponder。

你現在在做什麼似乎有點哈克。

+0

問題是,當我的tableView是在底部,不顯示任何文本框,但鍵盤仍然顯示。當文本字段即將離開屏幕時,是否有辦法退出鍵盤? – HansPinckaers 2009-08-21 11:59:01