2011-04-26 74 views
0

我是Iphone app開發新手。我遇到了一個問題。我有表格視圖,我在每一行插入文本字段。我完成了UI部分。但是我怎樣才能從tableview中的文本字段獲取值。我創建了customCell類。我無法使用IBOutlet和全部。如何從自定義tableview單元格獲取數據

這裏是我的代碼:

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

    static NSString *CellIdentifier = @"Cell"; 

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 

    return cell; 
} 
+0

感謝您的回覆。但我的要求是我想在這些文本字段中輸入數據,我需要將數據保存在數據庫或數組中。首先我想存儲在NSMutableArray中。然後我會嘗試使用數據庫。在此先感謝... – Praveen 2011-04-27 13:03:39

+0

@Praveen有解決方案嗎? – Siva 2013-10-24 08:41:15

+0

https://stackoverflow.com/questions/28431086/getting-data-from-each-uitableview-cells-swift 看到這個鏈接 – 2017-10-20 18:14:08

回答

0

你應該有一個數據源(通常是一個NSMutableArray的)是(通常)包含每個單元格的值。您應該能夠通過使用indexPath來獲得您需要的值,例如

NSObject *object = [dataArray objectAtIndex:indexPath.row]; 

在上面的代碼我假定爲的tableView則dataSource是稱爲dataArray中陣列。我還以爲它包含了類型NSObject的的對象(這通常不是在現實世界的例子真實的,在這種情況下,它通常就像NSDictionary的或定製NSObject的子類的子類。

確認的tableView連接到它的DataSource的連接是通過(至少)完成的方法的setDataSource:的UITableView實例和numberOfSectionsInTableView:numberOfRowsInSection:委託方法

UITableViewCell子類通常不應該用於保存數據,如果以這種方式使用它,則會採用錯誤的方法。下面的網站應該是在使用的UITableView類像樣的介紹:http://www.mobisoftinfotech.com/blog/iphone/introduction-to-table-view/

+0

我想你誤解了他的問題。他在自定義單元格中有文本字段,他想知道用戶在其中輸入了什麼內容。 – 2011-04-26 14:33:51

+0

如果這是正確的,他應該爲他的** UITableViewCell **子類創建一個委託協議(或者使用tableView作爲單元格中textField的委託,不確定這是否100%正確)。使包含tableView的類成爲每個UITableViewCell的委託,以便此類可以處理用戶輸入。 – 2011-04-26 14:43:03

0

正如人Schreurs已經說明你需要實現UITextFieldDelegate協議到你的viewController(與UITableViewDataSource一起),看看那些在文檔中學習更多的東西你可以和他們一起做。但是這比在你的視圖中使用不同的UITextFields更棘手。

你必須考慮一個事實,即當一個單元格離開tableview的可見範圍時,它將被釋放或重用。因此,例如,如果單元格1包含文本字段,則在其中寫入內容,然後滾動到單元格15,則可能會獲得單元格1和其內容的文本字段的單元格。如果您準備好要重用的單元格,清空textFields,則必須將該數據保存在某處,以便將其重新輸入到適當的單元格中。畢竟,你會刮你的頭什麼textField調用你的委託(可能是你的viewController,所以你必須用一個數字來標記它們,你可以提取一個行號 - 即cell.textField.tag = indexPath .row + 100)。

所以總結起來,你想這樣的事情在你的viewController

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    if ([textField.text length] > 0) { 
     NSUInteger row = textField.tag - 1; 
     [textFieldValues setObject:textField.text forKey:[NSNumber numberWithInt:row]]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellId = @"cellId"; 
    TextFieldTableViewCell *cell = (TextFieldTableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellId]; 
    if (!cell) 
     cell = [[[TextFieldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease]; 

    cell.textField.tag = indexPath.row + 1; 
    cell.textField.delegate = self; 
    NSString *value = [textFieldValues objectForKey:[NSNumber numberWithInt:indexPath.row]]; 
    if (value) 
     cell.textField.text = value; 
    else 
     cell.textField.text = @""; 

    return cell; 
} 

,然後在TextFieldTableViewCell.h

@property (nonatomic, readonly) UITextField *textField; 

終於在你的TextFieldTableViewCell.m

@synthesize textField; 

ps當編輯textField離開可見單元格區域時,我正在遊蕩可能發生的情況,並且它沒有被重用或釋放......給了我寒戰!所以EndEditing應該是足夠的。

+0

我對這種情況有疑問 – Siva 2013-10-24 08:40:23

相關問題