我正在尝试从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
}
答案 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.text
将indexPath
分配给某些内容。
这看起来像
id myDomainObject = [self objectAtIndexPath:indexPath];
cell.textLabel.text = myDomainObject.text;
因此,如果您可以在prepareForSegue中获取indexPath,则可以获取域对象,然后从中获取文本。
没有看到你的tableView:cellForRowAtIndexPath:
我无法提供更多建议