如何在故事板中搜索Segue Identifier?

时间:2014-07-08 10:25:07

标签: ios swift xcode storyboard

我的controller中有很多storyboard我正在打电话。

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

如果我想在xcode故事板中搜索controllersomeIdentifier的关联,那我该怎么办?

有没有办法或者我必须点击并检查所有controller

5 个答案:

答案 0 :(得分:3)

不幸的是,在代码中找不到视图控制器/故事板场景的故事板标识符。

您可以考虑在项目中添加额外的目标/构建阶段,该阶段运行脚本以从故事板XML中提取segue标识符并转换为可导入的常量文件。然后你得到字符串的运行时检查。

像这样的东西(推送segues):

grep -r -h  "kind=\"push\"" *.storyboard | sed -e 's/.*identifier="\(.*\)".*id=\".*/extern NSString * const XXXSegueName_\1;/' | sort | uniq  > "XXXSegueConstants.h"
grep -r -h  "kind=\"push\"" *.storyboard | sed -e 's/.*identifier="\(.*\)".*id=\".*/NSString * const XXXSegueName_\1 = @\"\1\";/' | sort | uniq  > "XXXSegueConstants.m"

应该给你:

extern NSString * const HDCSegueName_PushMyViewController;

NSString * const HDCSegueName_PushMyViewController = @"PushMyViewController";

我会留下其他的segue类型作为读者的练习!

答案 1 :(得分:2)

根据Drux的建议:

我找到的最好的方法是在XML源代码(Open As | Source Code)中搜索Segue Identifier作为viewcontroller的名称并从那里获取它。

答案 2 :(得分:0)

没有通过他的segueIdentifier获取viewController的直接方法,但是你可以访问prepareForSegue中的目标控制器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    DestinationViewController * nextVC = segue.destinationViewController; 

} 

答案 3 :(得分:0)

我不认为在UIStoryboard中有一种直截了当的方法,但也许你可以从代码中获取它,在源视图控制器中实现prepareForSegue,就像这样

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender  {
    UIViewController * nextVC = segue.destinationViewController; 
    if ([segue.identifier compare:@"someIdentifier"] == NSOrderedSame) {
         NSLog(@"%@", [nextVC class]);
    }
} 

这将打印目标视图控制器的名称

答案 4 :(得分:0)

无法通过公共API进行通信,但是可以使用以下私有API进行测试:

id<NSObject> template = [cell performSelector:NSSelectorFromString(@"selectionSegueTemplate")];
  if (template) {
    [template performSelector:NSSelectorFromString(@"perform:") withObject:cell];
  }

来源:https://github.com/soutaro/Obihiro

如果要在prepareForSegue中使用indexPathOfSelectedRow,则可能需要在此之前调用selectRow。