2012-10-22 42 views
0

我創建了一個表格,其中每個單元格都包含文本標籤和文本字段。我將這些文本字段添加爲[cell addSubview:passwordField];,並且從視覺角度來看,它們顯示並且可編輯,等等。表格單元格子視圖迭代沒有查找文本字段

當我嘗試從文本字段中檢索輸入的值時,會出現問題。我遍歷單元格,並嘗試抓住子視圖(IE文本框),但是,我的迭代只發現文本標籤。

這裏是我使用的搜索代碼:即沒有結果

for(NSInteger i =0; i < [tableView numberOfRowsInSection:0]; i++){ 
    NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0]; 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path]; 
    UIView* subView = [[cell.contentView subviews]lastObject]; // I've also tried object at index here 

// Anything beyond this is just matching.... 

我又做法是遞歸搜索子視圖,但一次。

回答

6

您已將您的textField添加到cell的subView上。

[cell addSubview:passwordField]; 

當您試圖在cell.contentView上找到它。
添加您textField作爲cell.Contentview

[cell.contentView addSubview:passwordField]; 

一個子視圖,發現它以這種方式 -

for(UIView *view in [cell.contentView subviews]) 
{ 
    if([view isKindOfClass:[UITextfield class]]) 
    { 
     UITextField *textField = (UITextField *)view; 
     NSLog(@"%@",textField.text); 
    } 
} 
2

爲什麼沒有一個數據源映射到TableView,只是檢索/更新值的數據源。然後,您可以致電reloadRowsAtIndexPaths加載剛更改的行。試圖遍歷TableView而不是僅僅更新數據源看起來效率很低。

2

相反的UIView* subView = [[cell.contentView subviews]lastObject];你可以嘗試找到它:

for(UIView *view in [cell subviews]) 
{ 
    if([view isKindOfClass:[UITextfield class]]){ 
    // view is the reference to your textfield 
    } 
} 

這樣,你可以作爲子視圖添加其他UIView S和仍然得到文本框的參考,而不必跟蹤其子視圖索引。

0

兩件事情發生的對我說:

  1. 從長遠來看這將是更容易地創建一個UITableViewCell含有UITextField這是作爲一個屬性進行訪問。您可以使用筆尖佈局單元格,也可以在單元格init方法中以編程方式進行佈局。這種方法將使您的代碼更易於管理。

  2. 您需要考慮細胞再利用。如果你重複使用單元格(你應該是這樣),那麼在重用它之前,你需要存儲從文本字段獲取的值。

相關問題