我的controller
中有很多storyboard
我正在打电话。
[self performSegueWithIdentifier:@"someIdentifier" sender:self];
如果我想在xcode故事板中搜索controller
与someIdentifier
的关联,那我该怎么办?
有没有办法或者我必须点击并检查所有controller
?
答案 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。