Segues 直接从情节提要 xcode 中的视图控制器警告启动
Posted
技术标签:
【中文标题】Segues 直接从情节提要 xcode 中的视图控制器警告启动【英文标题】:Segues initiated directly from view controllers warning in storyboard xcode 【发布时间】:2012-06-23 13:04:47 【问题描述】:您好,我以编程方式创建了按钮并将其连接到另一个视图,但我收到了 segue 警告
我应该使用prepareForSegue
方法制作故事板,但我不知道如何,互联网上有一些示例,但我在使用该示例时遇到错误,请您帮帮我
这是我的代码
创建按钮
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
button.tag = currentTag;
currentTag++;
[button.layer setBorderColor: [[UIColor blackColor] CGColor]];
[button.layer setBorderWidth: 1.0];
[button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
button.frame = CGRectMake(80*x, 32*y, 80, 32);
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[buttonView addSubview: button];
按钮操作
-(void)buttonPressed:(UIButton *)button
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
[self performSegueWithIdentifier:@"WeekView" sender:self];
准备继续 我的警告
直接从视图控制器启动的 Segue 必须有一个标识符以用于 -[UIViewController performSegueWithIdentifier:sender:]
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"WeekView"])
[segue.destinationViewController setTitle:@"WeekView"];
【问题讨论】:
您是通过编程方式还是在 Interface Builder 中创建 Segue? 【参考方案1】:直接从视图控制器启动的 Segue 必须有一个标识符以用于 -[UIViewController performSegueWithIdentifier:sender:]
当您直接从 Storyboard 中的视图控制器(即,不是从按钮或任何操作控件)拖动 segue 并且不输入标识符(名称)时,会出现此警告。
你必须给它们一个标识符,否则就无法以编程方式调用它们......这就是你要链接这样的 segue 的唯一原因。
在 Xcode 8 中,您应该能够双击警告以让情节提要显示有问题的 segue,以便您可以为其添加名称。
【讨论】:
接手一个有这样警告的项目真是令人沮丧 - 有没有办法知道这个 segue 在 IB 中的什么地方? @powerj1984 回顾旧项目时,我也遇到了这个问题。我必须单击每个故事板 segue 并检查它是否来自视图控制器。如果是,那么我给它一个标识符。另一种解决方案是让 Xcode 5 帮助识别源代码。 专业提示:在情节提要中双击警告,它将跳转到违规者。 也可以在日志文件中查看警告,应该有segue标识符。然后你只需打开故事板作为源代码和 cmd+f 为该标识符。 我有 Xcode 8.0,双击打开 Storyboard 的新窗口【参考方案2】:这解决了我的问题。
转到 Storyboard > 检查所有 Push 或 Pop 关系segue。
选择每个 segue 关系 > 检查属性检查器属性 > Storyboard Segue 部分
在该部分中,为所有 segue 提供 identifier。
【讨论】:
【参考方案3】:在 Xcode 5 中,我不仅命名了 segue,而且命名了它们导致的视图控制器,从而消除了这个警告 - 每个视图控制器都需要一个 Storyboard ID。如果你只命名segues,这个(误导性的)警告仍然会出现。
【讨论】:
【参考方案4】:我也有同样的警告。您必须检查每个 segue 是否具有 XCool 所说的标识符。
Xcool - 在回顾一个较旧的项目时,我也遇到了这个问题。我必须单击每个故事板 segue 并检查它是否来自视图控制器。如果是,那么我给它一个标识符。
同时检查你的 unwind segues! 这解决了我的问题。
【讨论】:
以上是关于Segues 直接从情节提要 xcode 中的视图控制器警告启动的主要内容,如果未能解决你的问题,请参考以下文章
在情节提要中使用 segues 使视图控制器具有非可选属性?