2012-04-15 80 views
6

当我单击我的UITableView中的某个列表项时,我想将我单击的项目的索引传递给下一个详细视图。通过UITableView列表之间的索引号segue

这是迄今为止我的相关代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    HomeworkDetails *view = [[HomeworkDetails alloc] init]; 


    int lastIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
    NSLog(@"%u", lastIndex); 

    [self performSegueWithIdentifier: @"HomeworkDetailsSegue" sender:self]; 
    view.currentIndex = lastIndex; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

} 

在这一点上,我可以成功移动到下一个视图控制器(HomeworkDetails),但信息没有通过。我试图通过做view.currentIndex = lastIndex;来完成这个,但是这不起作用。我还能如何做到这一点?对不起,我错过了什么;我是iOS开发的初学者。

搭配建议:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    HomeworkDetails *view = [[HomeworkDetails alloc] init]; 


    int lastIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
    NSLog(@"%u", lastIndex); 

    [self performSegueWithIdentifier: @"HomeworkDetailsSegue" sender:self]; 
    view.currentIndex = lastIndex; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 



} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"HomeworkDetailsSegue"]) { 

     // note that "sender" will be the tableView cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; //**error** 


     HomeworkDetails *vc = (HomeworkDetails*)[segue destinationViewController]; 
     vc.currentIndex = indexPath.row; 
    } 
} 

Error from Compiler

+0

“currentIndex”是否意味着您的tableView控制器或segue的目标viewController上的属性? – jonkroll 2012-04-15 22:02:36

+0

它是目标ViewController上的一个属性。对困惑感到抱歉。另外,为了测试,我基本上将目标控制器上的TextView设置为此属性,但始终为0. – Kgrover 2012-04-15 22:04:46

回答

18

您所描述的内容最好在prepareForSegue:sender:方法中完成,而不是didSelectRowAtIndexPath:。在你的故事板中,确保在你的tableView的原型单元格和目标视图控制器之间建立了segue。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{  
    if ([segue.identifier isEqualToString:@"HomeworkDetailsSegue"]) { 

     // note that "sender" will be the tableView cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

     HomeworkDetails *vc = (HomeworkDetails*)[segue destinationViewController]; 
     vc.currentIndex = indexPath.row; 
    } 
} 

此外,作为一个风格问题,我建议重新命名HomeworkDetails类HomeworkDetailsViewController。这样做会更紧密地遵循Apple的约定,并使其更清晰地表示类。

+0

我在此行上遇到错误:'self.tableView indexPathForCell:cell];'编译器说tableView不是当前接口的属性。还有,你是什么意思“确保它在你的tableView的单元格和目标视图控制器之间建立起来” 我怀疑这可能是问题;截至目前,segue是在我的currentViewController和nextViewController之间的......我如何从tableView中取而代之呢? – Kgrover 2012-04-15 22:33:55

+0

'prepareForSegue:'方法应该是你的tableview控制器类的一部分,而不是HomeworkDetails类。 至于设置segue,点击故事板中的tableview原型单元格,以便选中单元格。然后在从该单元格拖到目标视图控制器的同时按住Ctrl键。最后,在属性检查器中将您的segue的标识符标签设置为“HomeworkDetailsS​​egue”。 – jonkroll 2012-04-15 22:37:19

+0

这是我原来的课程的一部分,因为我相信它应该是。这是在我最初启动我的继续课。我只是说现在Segue从故事板中的ViewController - > Destination ViewController。这是它应该或应该从UITableView - >目的地视图控制器,我该怎么做?此外,它给出的错误是在“HomeworkPage”类型的对象上找不到Property indexPathForCell。 HomeworkPage是我的原始ViewController,它包含tableView。 – Kgrover 2012-04-15 22:43:00

0

你应该在你的新视图索引属性设置segueing将其与performSegueWityIdentifier之前。为了更进一步,编码惯例的最佳实践需要使用标准的prepareForSegue方法建立新的视图。