从详细信息披露按钮 segue 传递对象

Posted

技术标签:

【中文标题】从详细信息披露按钮 segue 传递对象【英文标题】:Passing an object from a detail disclosure button segue 【发布时间】:2012-06-25 21:00:02 【问题描述】:

如何将对象从详细信息显示点击传递到详细信息视图控制器?对此有什么建议或快速修复吗?理想情况下,我想创建一个这样的方法:

[self performSegueWithIdentifier:@"showDetail" sender:self passObject:object];

原因是“准备转场”似乎只有在我在详细信息披露指示器之前按下单元格时才会被调用。我如何创建一个像上面这样的方法来创建下面的 prepare 效果?

if ([[segue identifier] isEqualToString:@"showDetail"]) 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    id object = [_objects objectAtIndex:indexPath.row];
    [[segue destinationViewController] setDetailItem:object];

我已经尝试像这样创建 UIStoryboardSegue 的子类,但遇到了两个问题。

@implementation masterToDetail
-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender passObject:(id)object
    [self.destinationViewController setDetailItem:object];
    [self performSegueWithIdentifier:identifier sender:sender];


-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender
 //What code should go here? Issue one   


-(void)perform
    //Second issue, the compiler will crash and say I need to override perform.

【问题讨论】:

【参考方案1】:

我通过完全放弃 segue idea 的子类解决了这个问题。我删除了自定义 segue 并将推送 segue(从 tableviewcontrollre)到我的详细视图控制器。然后我创建了一个实例变量NSIndexPath* _ipath;,我的代码如下:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
    _ipth = indexPath;
    [self performSegueWithIdentifier:@"showDetail" sender:self];

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    NSLog(@"prepping");
    if ([[segue identifier] isEqualToString:@"showDetail"]) 
        NSLog(@"in if");
        id object = [_objects objectAtIndex:_ipth.row];
        [[segue destinationViewController] setDetailItem:object];
    

这让我们为 segue 做准备,为正确的单元格工作。

【讨论】:

我认为这是我见过的最快的人问然后回答他们自己的问题。 我决心修复它,并且在我想问之前已经花了很长时间。 xD 您也可以始终提供单元格或 indexPath 作为发件人。然后你也不必为它创建一个 ivar。 如何在界面生成器中将一个 segue 从表视图控制器连接到您的详细视图控制器??【参考方案2】:

    打开故事板

    选择主视图控制器 - 主

    从 UITableViewCell 中选择 Segue 到 Detail View Controller - Detail

    打开属性检查器

    标识符 -> masterToDetail 写入

【讨论】:

这如何允许将对象引用从主视图控制器传递到详细视图控制器? @Douglas 它没有 - 你在 prepareForSegue:sender 中这样做【参考方案3】:

您可以简单地右键单击表格视图单元格,然后从辅助操作中按住 ctrl 并拖动。

【讨论】:

以上是关于从详细信息披露按钮 segue 传递对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从地图图钉上的披露按钮调用 segue?

从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController

使用带有自定义按钮的主详细信息应用程序的 segue。

在 UIButton 上放置一个详细信息披露按钮

如何根据按下的按钮取消隐藏标记的详细信息披露按钮

如何使用“详细信息披露”按钮?