0

在 UITableView 上推送到详细视图控制器,无论我做什么prepareForSegue都无法获得被选中的行。我试过了:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

但结果为零。我试过了:

 NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];

问题是发件人正在通过,正如我从日志中看到的那样:

 Sender is <ARASpecialCell: 0x75cd6d0; baseClass = UITableViewCell; frame = (0 44; 320 44); text = 'Late Night'; autoresize = W; layer = <CALayer: 0x75c98c0>>

特殊单元格是因为我尝试对单元格进行子类化并添加公共属性,但在访问它时遇到问题。

我试图只获取文本标签并使用它,但产生了错误:

 "property "textlabel" not found on object of type '__strong id'"

我尝试“在索引路径中选择行”来加载下一个视图控制器,但是详细视图控制器是从情节提要上的另一个控制器设置的,重新配置会很麻烦。

这个 TableViewController 没有什么特别之处。任何关于出现问题的建议将不胜感激。

4

1 回答 1

0

您需要在控制器中使用 @property 来保存所选项目。例如,您选择单元格并在didSelectCellAtIndexPath您的 selectedItem 属性中保存适当的数据对象。然后你必须调用你在界面生成器中创建的 segue。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     self.selectedItem = [self.fetchedResultsController objectAtIndexPath:indexPath];
     [self performSegueWithIdentifier:@"Item Details Segue" sender:self];
}

然后在您的 performSegueWithIdentifier 中,您可以对 selectedItem 做任何您想做的事情:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
     if ([segue.identifier isEqualToString:@"News Details Segue"])
    {
        NewController *controller = segue.destinationViewController;
        NewController.item = self.selectedItem;
    }
}
于 2013-03-13T08:08:45.437 回答