gpt4 book ai didi

ios - 如何从 UITableViewCell 转换到另一个 View Controller

转载 作者:行者123 更新时间:2023-11-29 03:07:53 25 4
gpt4 key购买 nike

我正在尝试从带有原型(prototype)单元格的 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;
}

没有发生的是从表格到细节的过渡我有一个从原型(prototype)单元格到细节的推送 segue。

我错过了什么?

最佳答案

你在这里做错了很多。使用 segue 时,您不会创建该类的实例。您只需调用:

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

这将使用您在 Storyboard中定义的转场。其中 MySegue 是您创建的 segue 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];
}

关于ios - 如何从 UITableViewCell 转换到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22561125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com