2012-05-30 21 views
3

我有一個UITableView,它被分解爲用戶定義的數字sections。在這些sections的每一箇中,總是有2個rows。這兩個rows中的每一個都包含用戶可以編輯的UITextField如何在動態UITableView(iPhone)中處理對UITextFields的引用

我需要的是能夠在稍後訪問這些UITextFields中的數據的方法。我希望這會是一個簡單的問題,但是這會導致我很大的悲傷。

到目前爲止,我已經嘗試了兩種方法:

嘗試1

我創建了兩個NSMutableArrays我在其中添加了UITextField對象的索引i(對應於來自的section)。然後我試圖通過遍歷數組來訪問這些值。自從UITextFields繼續擦乾淨後,這並沒有奏效。每當我向下滾動桌子並且UITextField不在視野中時,當我回去時它的內容已被擦乾淨。

嘗試2

我試圖讓的sectionsUITableView(這是罰款)的數量的保持。然後我想遍歷UITableView的每個section,記錄每個的rows中的值。因爲我不確定如何做到這一點,或者甚至有可能,所以這是我變得僵硬的地方。

我很抱歉,如果這是一個天真的問題,但我真的很掙扎,並會感謝任何建議。

回答

4

請記住,滾動時文本字段會被重用,因此您並不是真的想要存儲對它們的引用。

你所做的是捕獲輸入的信息。最簡單的方法是在委託中實現textFieldDidEndEditing協議方法。

棘手的部分是找出文本字段所在的行。最好的方法是創建一個屬性的UITableViewCell子類。然後,您可以在使用tableview:willDisplayCell:forRowAtIndexPath:配置單元格時進行設置。

然後,在textFieldDidEndEditing中,通過其超級視圖訪問tableViewCell indexPath屬性。即:

NSIndexPath indexPathOfParentCell = [(MyUITableViewCellSubclass *)self.superview indexPath]; 

這樣做可以讓你知道單元的部分和行。

+0

感謝。我真的很喜歡這個想法,但是我遇到了一個問題,因爲我在子類「UITableviewCell」上設置了'indexPath',但是當'textFieldDidEndEditing'被調用時,我無法訪問'indexPath'(因爲它的一個傳入的UITextField,而不是'UITableViewCell')。你有什麼建議嗎? –

+0

是的,當我寫這個時,我很匆忙,對不起。您需要訪問文本字段的超級視圖,或者替換文本字段的子類,然後在willDisplayCell中迭代表格視圖單元格的所有子視圖,並設置每個文本字段的索引路徑。 – lnafziger

+2

感謝您的幫助。我結束了UITextField的子類化,並在其上添加了NSIndexPath,而不是在UITableViewCell上。現在一切正常。再次感謝。 –

0

如果您將文本字段的文本保留在您的數組中,而不是文本字段本身,則您的「嘗試1」應該可以正常工作。 (任何試圖對數據對象進行查看或控制的東西都有很可能出錯)。

無論作爲表視圖的數據源的行爲是否應該能夠根據段的重新填充滾動的單元格如果內容單獨存儲,則爲行。

1

在表的cellForRow像這樣創建文本字段,並給它一個標籤

UITextField * userField = [[[UITextField alloc] initWithFrame:CGRectMake(0, 12, self.view.frame.size.width -20, 20)] autorelease]; 
    userField.tag = 1001; 
    userField.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14]; 
    userField.textAlignment = UITextAlignmentCenter; 
    userField.delegate = self; 
    userField.autocorrectionType = UITextAutocorrectionTypeNo; 
    userField.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    userField.clearButtonMode = UITextFieldViewModeWhileEditing; 

    if (indexPath.row == 0) 
     [cell.contentView addSubview:userField]; 

然後訪問文本字段,如下所示:

UITextField *userField = (UITextField *)[[(UITableViewCell *)[(UITableView *)tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] contentView] viewWithTag:1001];