通过UITableView列表之间的索引号segue
当我单击我的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;
}
}
您所描述的内容最好在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的约定,并使其更清晰地表示类。
我在此行上遇到错误:'self.tableView indexPathForCell:cell];'编译器说tableView不是当前接口的属性。还有,你是什么意思“确保它在你的tableView的单元格和目标视图控制器之间建立起来” 我怀疑这可能是问题;截至目前,segue是在我的currentViewController和nextViewController之间的......我如何从tableView中取而代之呢? – Kgrover 2012-04-15 22:33:55
'prepareForSegue:'方法应该是你的tableview控制器类的一部分,而不是HomeworkDetails类。 至于设置segue,点击故事板中的tableview原型单元格,以便选中单元格。然后在从该单元格拖到目标视图控制器的同时按住Ctrl键。最后,在属性检查器中将您的segue的标识符标签设置为“HomeworkDetailsSegue”。 – jonkroll 2012-04-15 22:37:19
这是我原来的课程的一部分,因为我相信它应该是。这是在我最初启动我的继续课。我只是说现在Segue从故事板中的ViewController - > Destination ViewController。这是它应该或应该从UITableView - >目的地视图控制器,我该怎么做?此外,它给出的错误是在“HomeworkPage”类型的对象上找不到Property indexPathForCell。 HomeworkPage是我的原始ViewController,它包含tableView。 – Kgrover 2012-04-15 22:43:00
你应该在你的新视图索引属性设置segueing将其与performSegueWityIdentifier之前。为了更进一步,编码惯例的最佳实践需要使用标准的prepareForSegue方法建立新的视图。
“currentIndex”是否意味着您的tableView控制器或segue的目标viewController上的属性? – jonkroll 2012-04-15 22:02:36
它是目标ViewController上的一个属性。对困惑感到抱歉。另外,为了测试,我基本上将目标控制器上的TextView设置为此属性,但始终为0. – Kgrover 2012-04-15 22:04:46