How to handle references to UITextFields in dynamic UITableView (iPhone)

ios, iphone, uitableview, uitextfield

Solution

Keep in mind that the text fields get reused as you scroll, so you don't really want to store references to them.

What you do instead, is to capture the information as it is entered. The easiest way to do this is to implement the `textFieldDidEndEditing` protocol method in the delegate.

The tricky part is figuring out which row the text field is in. The best way is to create a `UITableViewCell` subclass which has a `NSIndexPath` property. You can then set that when you configure the cell with `tableview:willDisplayCell:forRowAtIndexPath:`.

Then, in textFieldDidEndEditing, access the tableViewCell indexPath property through its superview. i.e.:

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

Doing it this way allows you to know both the section and row of the cell.

Problem

I have a `UITableView` that is broken up into a user defined number of `sections`. Within each of these `sections` there are always 2 `rows`. Each of these two `rows` contains a `UITextField` which the user is able to edit. What I need is a way of being able to access the data in these `UITextFields` at a later point. I was hoping it would be a simple problem however it's causing me a great deal of grief. So far I have tried two approaches: Attempt 1 I created two `NSMutableArrays` in which I added the `UITextField` objects to at index i (corresponding to the `section` it came from). I then tried to access the values by iterating through the array. This didn't work since the `UITextFields` kept getting wiped clean. Every-time I scroll down the table and the `UITextField` is out of view, when I go back it's contents have been wiped clean. Attempt 2 I tried to get hold of the number of `sections` in the `UITableView` (this was fine). I then wanted to iterate through each `section` of the `UITableView`, recording the values in the `rows` of each. This is where I became unstuck since I'm not sure how to do this or if it's even possible. I apologise if this is a naive question to ask, however I'm really struggling and would appreciate any advice.

Original source