Objective c Can';无法访问模态UITableViewController子类中UITextField对象的右文本
我有一个子类UITableViewController,用于为另一个表中的新单元格添加新数据。这意味着,我在顶部有一个“取消”和一个“保存”按钮,用于保存数据并返回到要将新对象添加到的表。我以模态方式显示添加控制器 我的问题是,我不知道如何从UITableViewController子类中tableView的用户输入单元格中获取数据,以便将它们保存在CoreData文件中 下面是我如何尝试的代码-但在控制台上,我只得到(nil)的人名:Objective c Can';无法访问模态UITableViewController子类中UITextField对象的右文本,objective-c,uitableview,uitextfield,Objective C,Uitableview,Uitextfield,我有一个子类UITableViewController,用于为另一个表中的新单元格添加新数据。这意味着,我在顶部有一个“取消”和一个“保存”按钮,用于保存数据并返回到要将新对象添加到的表。我以模态方式显示添加控制器 我的问题是,我不知道如何从UITableViewController子类中tableView的用户输入单元格中获取数据,以便将它们保存在CoreData文件中 下面是我如何尝试的代码-但在控制台上,我只得到(nil)的人名: - (void)save { NSLog(@"Savin
- (void)save
{
NSLog(@"Saving ...");
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *cell = [self tableView:[self tableView] cellForRowAtIndexPath:indexPath];
NSString *personName = [[cell textField] text];
NSLog(@"New Person: %@", personName);
// Do saving with Core Data and updating here.
[self dismissModalViewControllerAnimated:YES];
}
我想您还需要以下方法来理解问题:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
EditableDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[EditableDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.accessoryType = UITableViewCellAccessoryNone;
if (indexPath.section == 0) {
[cell.textField setPlaceholder:@"Name"];
} else {
switch (indexPath.row) {
case 0:
[cell.textField setPlaceholder:@"Birth Year"];
break;
case 1:
[cell.textField setPlaceholder:@"Weight in kg"];
break;
case 2:
[cell.textField setPlaceholder:@"Height in cm"];
break;
case 3:
[cell.textField setPlaceholder:@"Sex"];
break;
default:
break;
}
}
return cell;
}
我真的找不到失败。在我看来,它应该是这样工作的。。。但事实并非如此。有人可以帮忙吗?在设置单元格文本的方法中,您可以更改单元格的文本字段,但是您获取的用于记录/保存核心数据的字符串来自文本标签。这是故意的差异吗?不要调用表视图数据源方法来获取单元格中的值。而是直接从表视图获取它 与此相反:
UITableViewCell *cell = [self tableView:[self tableView] cellForRowAtIndexPath:indexPath];
这样做:
UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:indexPath];
按您现在的方式进行操作实际上是重新创建单元格,因此会丢失您输入的值。datasource方法只意味着由表调用以确定要显示的内容 你是对的,我现在把它改成了textField,但还是不起作用!相同的结果…是否确实要调用
-tableView:cellforrowatinexpath:
而不是-cellforrowatinexpath:
?