tableView单元格返回NULL

时间:2013-09-01 23:40:22

标签: ios objective-c uitableview

我正在尝试从tableView单元格和prepareForSegue方法中读取文本,我会将文本设置为NSUserDefaults。但是,当我NSLog文本时,它返回NULL。 这就是我尝试过的。

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
      {
         NSString *blah = sender.textLabel.text;
         NSLog(@"%@",blah); // It returns NULL no matter what cell is clicked
      }

2 个答案:

答案 0 :(得分:2)

您不应该使用单元格中的标签,因为它是视图的一部分。虽然单元格是正确的,但它的视觉效果可能会在调用prepareForSegue:时被处理掉。

MVC这样做的方法是查询单元格行数据的基础数据源,并使用该数据而不是标签。

这就是我的意思:在cellForRowAtIndexPath:的实现中的某处,您的代码看起来像这样:

NSString *labelData = [myDataSource objectAtIndex:indexPath.row];
cell.textLabel.text = labelData;

您应该在prepareForSegue:方法中复制该代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender
{
    NSUInteger row = [self.tableView indexPathForCell:sender].row
    NSString *labelData = [myDataSource objectAtIndex:row];
    NSLog(@"%@", labelData); // This should work
}

答案 1 :(得分:0)

tableView:cellForRowAtIndexPath:方法中,您将基于cell.textLabel.textindexPath分配给某些内容。

这看起来像

id myDomainObject = [self objectAtIndexPath:indexPath];

cell.textLabel.text = myDomainObject.text;

因此,如果您可以在prepareForSegue中获取indexPath,则可以获取域对象,然后从中获取文本。

没有看到你的tableView:cellForRowAtIndexPath:我无法提供更多建议