2013-04-02 129 views
4

我在表格中的自定義單元格中有一個UITextField。我創建了新的類DataCell它是UITableViewCell的子類。在DataCell內部,我爲textfields創建了插座,並且我還在實現文件中使用了'編輯完成'的方法,並且我在那裏處理textField值。如何從UITextField獲取UITableViewCell的索引?

我現在想知道如何獲取單元格的rowIndex或編號,因爲每次點擊+按鈕時,都會在表格中加載新的自定義單元格。如果我得到標籤,我總是會得到相同的標籤號碼,而不管我選擇的單元格。

+2

您不能將cellForRowAtIndexPath中的文本字段的標記設置爲indexPath.row?這就是我通常看到這種事情的方式。 – rdelmar

+0

我是新手,如何在接口生成器中專門設置? –

+1

你不能。它需要在tableView:cellForRowAtIndexPath:中設置,因爲單元格被重用。 – rdelmar

回答

10

傳遞給您的委託的文本字段是單元格contentView的子視圖。

UITableViewCell *cell = (UITableViewCell*) textField.superview.superview; 
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
+1

這是非常脆弱的,但它會在特定情況下工作。 –

+0

此代碼是爲這種情況編寫的,它不易碎。 – Mundi

+3

這是非常脆弱的:你依靠文本字段總是存在的事實,b)綁定到超級視圖,c)依次綁定到單元格。雖然,它適用於這種情況。你是對的。 – CodaFi

2

當您不確定文本字段和單元格之間的層次結構時,可以使用此邏輯。

UITableViewCell *cell = nil; 
UIView *parentView = textField.superview; 
while(parentView) { 
    if([parentView isKindOfClass:[UITableViewCell class]]) { 
     cell = parentView; 
     break; 
    } 
    parentView = parentView.superview; 
} 

if(cell) 
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
+0

嗨,感謝您的答案我有清晰的層次結構,但是我得到的錯誤,在對象DataCell上找不到tableView –

0

將標籤添加到tableView:cellForRowAtIndexPath:方法中的文本字段。在這個例子中,我有一個標籤,自定義單元格和文本字段:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 
    cell.label1.text = self.theData[indexPath.row]; 
    cell.textField.tag = indexPath.row; 
    return cell; 
} 

這聽起來像你也許處理您的自定義單元格類的編輯結束,但你可能要考慮這樣做而是使用表視圖控制器,因爲這樣可以方便地訪問模型,我認爲您正在修改用戶在文本字段中鍵入的內容。如果你這樣做,那麼你應該將文本字段的委託屬性連接到IB中的表格視圖控制器。

+0

如果你重新排序你的單元格然後標籤的概念是錯誤的.... – PVCS

0

如果我們接受脆弱的答案則貢獻新的東西,以談話的緣故:

CGRect rectInTableView = 
    [tableView convertRect:textField.bounds fromView:textField]; 

NSUInteger indexOfCellContainingTextField = 
    (NSUInteger)(rectInTableView.y/tableView.rowHeight); 

假設,使其脆弱:(i)所有行的高度相同; (ii)在桌面視圖上設置高度。如果你還沒有實施UITableViewDelegate -tableView:heightForRowAtIndexPath:那麼這兩個假設都會成立。你也正在利用這個事實,即將一個正浮點數轉換爲一個整數。我認爲,雖然仍然沒有完全清楚假設,但這比Mundi的解決方案更脆弱,因爲它僅僅假設你直接控制的事物(即細胞大小),而不是假設你不知道的事情(即,視圖層次結構UIKit在內部用於呈現表格視圖)。

相關問題