ios如何从 UITableViewCell 过渡到另一个视图控制器

发布时间: 2017/3/21 23:20:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图去从 UITableView 及原型细胞 detailviewcontroller 的我所选的项目。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"historyToDetail"])
    {
        BYFHistoryDetailViewController *controller = (BYFHistoryDetailViewController    *)segue.destinationViewController;
        controller.workOut = [[BYFWorkOut alloc] init];
        controller.workOut=_selectRow;
    }
}


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

    NSArray *items = [[BYFworkOutStore sharedStore] allItems];
    BYFWorkOut *selectedItem = items[indexPath.row];
    _selectRow = selectedItem;
}

发生什么不是从表过渡到细节我要推倒关注细节从原型单元格的地方。

我错过了什么?

解决方法 1:

你在这里做了很多错误。当使用铺垫的你不要创建类的一个实例。您只需调用︰

[self performSegueWithIdentifier:@"MySegue" sender:self];

这将使用您已定义的界限 storyboard 。其中 MySegue 是你创建的界限 ID。

当你想要传递的数据使用回调

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    BYFHistoryDetailViewController *vc = (BYFHistoryDetailViewController *)[segue destinationViewController];
    vc.workOut = selectedItem;
}

但使用此回调将意味着您将需要存储 selectedItem 后单击的行,所以你可以在这里访问它的地方。

编辑

您的代码还在这里似乎有点奇怪。

你将锻炼设置为一个新的对象。

detailViewController.workOut = [[BYFWorkOut alloc]init];

从数据创建另一个对象。

NSArray *items = [[BYFworkOutStore sharedStore] allItems];
BYFWorkOut *selectedItem = items[indexPath.row];

然后分配新对象,覆盖前一个。

//give detail view controller a pointer to the item object in row
detailViewController.workOut = selectedItem;

没有必要在所有有代码的第一行

编辑 2

如果你只打算使用的一种选择项目在一段时间。你可以你 UITableViewController 类。

@implementation MyTableViewControllerClass
{
    BYFWorkOut *_selectedItem;
}

内部 didSelectRowAtIndexPath :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSArray *items = [[BYFworkOutStore sharedStore] allItems];
   _selectedItem = items[indexPath.row];
}


编辑 3

我已经修改了代码你张贴在这里。您没有添加我发布的代码的第一行。请看看这个︰

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"historyToDetail"])
    {
        BYFHistoryDetailViewController *controller = (BYFHistoryDetailViewController    *)segue.destinationViewController;
        controller.workOut = _selectRow;
    }
}


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *items = [[BYFworkOutStore sharedStore] allItems];
    _selectRow = items[indexPath.row];

   [self performSegueWithIdentifier:@"historyToDetail" sender:self];
}
赞助商