【问题标题】:How do I include section information in indexPathForSelectedRow如何在 indexPathForSelectedRow 中包含部分信息
【发布时间】:2014-11-24 21:58:52
【问题描述】:

我有一个包含部分的表,由一个由四个数组组成的数组填充。如何修改 prepare for segue 方法中的 indexPathForSelectedRow 语句以包含部分信息?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    if ([[segue identifier]isEqualToString:@"plantSaveSegue"])
    {
        NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
        DetailViewController *grassType = [segue destinationViewController];

        //grassType.selectedPlant = [grassArray objectAtIndex:selectedRowIndex.row];
        grassType.selectedPlant = [plantArray objectAtIndex:selectedRowIndex.row];
    }
}

这对于一个部分非常有效,但是对于四个部分我该怎么办?

【问题讨论】:

  • 不确定我是否真的理解你的问题,但 NSIndexPath 已经有部分信息,只需查看 selectedRowIndex.section。
  • 谢谢,您给了我简单解决问题的线索。在我的 selectedRowIndex 路径中,我省略了完全定义路径。你的评论激发了适当的神经元,我解决了我的问题。再次感谢您。

标签: xcode uitableview segue sections


【解决方案1】:

在 .h 文件中声明 2 个 NSIntegers

NSInteger selectedSection;
NSInteger selectedRow;

现在在您的 viewDidLoad() 中,将这些初始化为“-1”

selectedSection = -1;
selectedRow = -1;

现在

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


selectedSection = indexPath.section;
selectedRow = indexPath.row;

//Now performSegue here
}

之后

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    if ([[segue identifier]isEqualToString:@"plantSaveSegue"])
    {
        NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
        DetailViewController *grassType = [segue destinationViewController];

        if(selectedSection == 0){
             grassType.selectedPlant = [firstArray objectAtIndex:selectedRow];}
        else if(selectedSection == 1){
             grassType.selectedPlant = [secondArray objectAtIndex:selectedRow];}
        else if(selectedSection == 2){
             grassType.selectedPlant = [thirdArray objectAtIndex:selectedRow];}
        else if(selectedSection == 3{
             grassType.selectedPlant = [fourthArray objectAtIndex:selectedRow];}

    }
}

希望对您有所帮助

【讨论】:

  • 感谢您的帮助。 segue 触发并显示下一个视图,但没有传递任何数据。我还在 NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow]; 行上收到警告,这是合乎逻辑的,因为它现在是一个未使用的变量。
  • 点击tableView中的任何一行是否不显示数据?您只使用一种 DetailViewController 吗?我想看看如何填充“DetailViewController”以进一步为您提供帮助。
【解决方案2】:

感谢所有帮助和指导。答案非常简单,输入表格中相应项目的完整且正确的路径。见下文:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier]isEqualToString:@"plantSaveSegue"])
{
    NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
    DetailViewController *grassType = [segue destinationViewController];
    grassType.selectedPlant = [[plantArray objectAtIndex:selectedRowIndex.section]objectAtIndex:selectedRowIndex.row];
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多