【问题标题】:Determining segue and unwind VC identities?确定 segue 和 unwind VC 身份?
【发布时间】:2014-01-30 12:52:53
【问题描述】:

我是 Objective-C 的新手,虽然我用其他语言编写过代码。

谁能给我一个简单的答案,告诉我如何识别我在 segue 中“解散”了哪个 VC?原谅我语言不好!

我有一个场景可以根据按下的按钮切换为两个不同的场景。当从这些场景中的任何一个展开时,我想对传回的数据执行特定的操作。但是为了不让整个事情崩溃(这种情况一直在发生!),我需要确定我从哪个场景返回,即展开的源(?)场景的身份或标识符,然后使用这些信息来确定要采取的行动。

我尝试在 Storyboard 中设置 segue 标识符,并尝试在目标和源中获取这些值,但在调试时它们总是为空。

这是一段代码,可能比我笨拙的解释更清楚!

    - (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
    ToDoListViewController *source = [segue sourceViewController];

    // HOW DO I DETERMINE WHICH VC I’VE JUST UNWOUND FROM?

    if (/* UNWOUND FROM FIRST SCENE */) {

        // DO SOMETHING
    }
    if (/* UNWOUND FROM SECOND SCENE */) {

        // DO SOMETHING ELSE
    }
}

更新:

我已经尝试过使用 segue.identifier 给出的建议,但它继续返回“null”。这是 1) 有问题的代码,2) 生成的日志,以及 3) segue 标识符的确认:

- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
    ToDoListViewController *source = [segue sourceViewController];//WAS AddToDoItemViewController but did NOT work.
    NSLog(@"segue from: %@", source);
    NSLog(@"segue identifier: %@", segue.identifier);
    if ([segue.identifier isEqualToString:@"addItemScene"]) {
        if (source.toDoItem.flag == 1) {
        ToDoItem *item = source.toDoItem;
        if (item != nil) {
            [self.toDoItems addObject:item];
            [self.tableView reloadData];
            }
        }
    }
}

日志结果: 2014-01-27 22:01:07.163 ToDoListML [1367:70b] 来自:AddToDoItemViewController:0x8a98a20 2014-01-27 22:01:07.165 ToDoListML[1367:70b] segue 标识符:(null)

我已经仔细检查了 segue 标识符是否已设置并且是正确的。

【问题讨论】:

  • 我已经发布了答案
  • 您好,亲爱的,您可以创建不同的退出调用,例如 (IBAction)unwindToListFromScene1:(UIStoryboardSegue *)segue 将您的操作连接到此。

标签: objective-c uiviewcontroller


【解决方案1】:

标识符可以设置为 - 选择连接 - 移动到属性检查器面板

if ([segue.identifier isEqualToString:@"Your first Controller"])
{
        ToDoListViewController *source = [segue destinationViewController];//this line needs to be changed, it works in prepare for segue, so it must work here as well
}
else if([segue.identifier isEqualToString:@"Your second Controller"])
{

}

【讨论】:

  • 嗯...是的,我已经尝试过了,但无法成功。让我尝试重新创建它,如果仍然没有运气,我将发布完整的代码。非常感谢!
  • 按照您上面的建议再次尝试执行后,我已经用代码更新了我的原始帖子...谢谢。
  • 关于我为 segue.identifier 得到的(空)结果有什么想法吗? (请参阅更新后的原始问题。)非常感谢!
  • @user3239117 我已经发布了答案
  • 是的,谢谢,但是 segue.identifier 在源和目标的日志中都返回(null)。为什么会这样?
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多