1

我正在尝试从 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
      }
4

2 回答 2

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
}
于 2013-09-01T23:59:14.860 回答
0

在您的tableView:cellForRowAtIndexPath:方法中,您将cell.textLabel.text基于indexPath.

这可能看起来像

id myDomainObject = [self objectAtIndexPath:indexPath];

cell.textLabel.text = myDomainObject.text;

因此,如果您可以在 prepareForSegue 中获取 indexPath,您就可以获取您的域对象并从那里获取文本。

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

于 2013-09-02T00:05:01.277 回答