我是Iphone app dev的新手。我遇到了一个问题。我有表视图,我在每行插入文本字段。我完成了UI部分。但是如何从tableview中的textfield获取值。我创建了customCell类。我无法使用IBOutlet。
这是我的代码:
- (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 :(得分:0)
你应该有一个dataSource(通常是NSMutableArray),它(通常)包含每个单元格的值。您应该能够通过使用indexPath获得所需的值,例如
NSObject *object = [dataArray objectAtIndex:indexPath.row];
在上面的代码中,我假设tableView的dataSource是一个名为 dataArray 的数组。我还假设它包含 NSObject 类型的对象(在现实世界的例子中通常不是这样,在这种情况下,它通常是一个子类,如NSDictionary或自定义NSObject子类。
确保tableView连接到它的dataSource。连接是通过(至少) UITableView 实例上的方法 setDataSource:和 numberOfSectionsInTableView:和 numberOfRowsInSection:委托方法。
您的 UITableViewCell 子类通常不应用于保存数据,如果以这种方式使用它,则采用错误的方法。以下网站应该是使用UITableView类的一个不错的介绍:http://www.mobisoftinfotech.com/blog/iphone/introduction-to-table-view/
答案 1 :(得分:0)
正如Schreurs已经解释过你需要为你的viewController实现UITextFieldDelegate协议(以及UITableViewDataSource),请查看文档中的那些以了解更多可以用它们做什么。但是这比在你的视图中使用不同的UITextField更加棘手。
您必须考虑这样一个事实:当一个单元格离开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;
P.S。我正在徘徊当编辑textField离开可见单元格范围时可能发生的事情,并且它没有被重用或释放......给了我一些寒意!所以EndEditing应该足够了。