2014-02-05 80 views
1

我有UITableView與自定義UITableViewCell每個單元包含一個UILabelUITextField如下所示。我在鍵盤頂部添加了一個Done按鈕來隱藏鍵盤。resignFirstResponder問題與自定義UITableViewCell中的UITextField

enter image description here

現在假設第二行的文本框是firstResponder,當時如果我滾動表視圖頂部,並從可見矩形搬出第二行。現在,如果我按Done鍵然後方法被解僱,我使用[[self view] endEditing:YES];應用程序崩潰。

爲了解決這個問題,我實現了下面的方法,並且我獲得了成功。

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    for(UIView *contentView in [[cell contentView] subviews]) 
    { 
     if([contentView isKindOfClass:[UIView class]]) 
     { 
      for(UITextField *textField in [contentView subviews]) 
      { 
       if([textField isKindOfClass:[UITextField class]] && [textField isFirstResponder]) 
       { 
        [textField resignFirstResponder]; 
        break; 
       } 
      } 
     } 
    } 
} 

現在的問題是,如果我這樣做,當第二排從可見光搬出矩形上面的方法被解僱,並預期鍵盤自動隱藏相同的情況。但在那時,當我將表視圖向下拖動並再次移動到可見矩形的第二行時,它的顏色發生了變化。 enter image description here

爲了解決這個問題的顏色我實現下面的方法,但它不工作

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [cell setBackgroundColor:[UIColor clearColor]]; 
} 

而且不但顏色問題。同樣,如果我觸摸到第二行鍵盤的textField顯示,並且如果我執行相同的方案tableView didEndDisplayingCell方法不會觸發該單元格。即使我按了Done關鍵應用程序崩潰。異常制動點指向[[self view] endEditing:YES];並顯示錯誤enter image description here

夥計們請幫幫我。我浪費了很多時間來弄清楚,但是我失敗了。

+0

您能否顯示調用了[[[self view] endEditing:YES]'的全部方法? – matthisb

+0

我調用了'[[self view] endEditing:YES];'用鍵盤連接的按鈕的觸摸事件 –

回答

1

當一個單元格滾動出視圖並被移除時,UIKit會調用didEndDisplayingCell。但是,當它具有焦點的編輯控件時,didEndDisplayingCell不會被調用。

一種可能的替代方法是通過設置

tableView.keyboardDismissMode = .OnDrag 

這導致的UITextView放棄第一響應,並因此didEndDisplayingCell被調用以關閉鍵盤上的阻力。

更多詳細信息here

相關問題