2013-03-13 61 views
0

在UITableView上推送到详细视图控制器,无论我做什么prepareForSegue都无法获取所选的行。我曾尝试过:在UINavigationView/TableView中嵌入的自定义UIScrollview崩溃 - 在动画上

- (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没有什么特别之处。任何有什么问题的建议,将不胜感激。

回答

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; 
    } 
} 
+0

太谢谢你了。我至少犯了两个错误: – 2013-03-14 01:26:32

+0

(多个意见无意) 1)第一个,头脑里的错误,是我在冲突中推动新的视图控制器在'didSelectARowAtIndexPath'中,我忘了它仍然是必要的调用它来获取索引路径。 2)也许我犯了错误1,因为'didSelectARow ...'没有被调用,因为我把segue直接连接到table view单元格。我可以看到一些明显的好处,如果用一个表格视图制作一个全定制的菜单,这不是直观的。挂在桌子上固定它。 – 2013-03-14 01:33:55