1

我有一个非常简单的问题。假设您有 2 个视图控制器 A 和 B。A 是带有 STATIC CELLS 的 UITableView。也就是说,A 仅使用情节提要对象构建,而不是以编程方式构建。B 也是一个 UITableView,但使用 DYNAMIC CELLS 以编程方式构建。因此,我将 A 中每个单元格的 Segues(在情节提要中设置了标识符)连接到 B Tableview。

现在我想知道当 A 中的一行被选中时,哪个 segue 被推送了。我知道如果我以编程方式在视图 A 中创建单元格并使用准备/执行 segue 方法,这可以很容易地完成。但由于 A 中的内容永远不会改变,我不想走那条路。当我在 A 中选择给定行时,我试图找出如何检查已推送哪个 segue 的原因。理想情况下,将有一些方法 DIDPERFORMSEGUE:(Segue 标识符)我可以从 B Viewcontroller 调用。

非常感谢您的帮助和建议。

4

2 回答 2

2

在您的“A”表视图中,您应该能够查看戳了哪一行,然后将该信息推送到您的“B”表。例如:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"UITableView_B"]){
        BTableViewController *vc = (BTableViewController *)[segue destinationViewController];
        NSIndexPath *path;
        path = [self.tableView indexPathForSelectedRow];
        [vc setSelectedPath:path];
    }
}

希望有帮助。祝你好运。

编辑:可能很明显,但在上面的“self.tableView”是一个指向 UITableView 的出口。

更新 就个人而言,我会硬着头皮为“A”创建一个类,但为了黑客攻击 - 应该可以返回并从以前的视图中获取数据。这是“错误代码”(imo)并假设您正在使用导航控制器 - 并且前一个视图是“A”表等......事不宜迟 - 应该可以这样做:

NSArray * views = [self.navigationController viewControllers];
NSUInteger prevViewIndex = [views count] - 2;
UIViewController * previousView = [views objectAtIndex:prevViewIndex];
ATableViewController * aTableViewController = (ATableViewController *) previousView;
NSIndexPath *path = [aTableViewController.tableView indexPathForSelectedRow];
于 2013-01-27T18:14:39.400 回答
0

我不能说我自己需要这样做,但是如果您真的不想更改源视图控制器,或者如果您经常需要从目标视图控制器中识别 segue,那么一种方法可以做到将是创建自己的 UIStoryboardSegue 子类。segue 已经知道目标视图控制器,因此让目标有机会检查 segue 是一件简单的事情。这样的事情应该可以解决问题:

@interface MyStoryboardSegue : UIStoryboardSegue
@end

@implementation MyStoryboardSegue

- (void)perform
{
    [super perform]

    if ([self.destinationViewController respondsToSelector:@selector(didPerformSegue:)]) {
        [self.destinationViewController didPerformSegue:self];
    }
}

@end

如果您出于其他原因已经在使用 UIStoryboardSegue 子类,这不是一个很好的解决方案。事实上,我什至还没有测试过代码,所以也许有一些我还没有想到的障碍。然而,关键是,如果您希望 segue 在执行时通知目的地,您可能可以安排它。

于 2013-07-10T20:03:45.507 回答