如何取消连接到 UIButton 的 segue

Posted

技术标签:

【中文标题】如何取消连接到 UIButton 的 segue【英文标题】:How do I cancel a segue that is connected to an UIButton 【发布时间】:2012-04-07 21:20:28 【问题描述】:

我正在处理这个tutorial,它展示了如何使用情节提要创建应用程序。我的 viewController 有两个 UIButtons,我已经将 segue 连接到这些 UIButtons。这些 segues 推送了一个新的 viewController。

现在我正在寻找一种方法来在某个条件成立时取消此转场。当我使用旧的 xib 文件来创建我的界面时,我能够做这样的事情:

-(IBAction)sendButton:(id)sender 
  if(TRUE) 
    // STOP !!  
  

这不再起作用了。如何取消新viewController的推送?

【问题讨论】:

您的问题不清楚。你的元素是如何连接起来的?使导航“转到新视图”的代码在哪里? 用户可以手动取消点击响应,方法是在释放按钮之前将手指从按钮上拖开...这是您的意思吗?我同意上面的评论,这个问题不清楚。 您必须阅读隐藏在链接后面的教程才能理解问题。这是关于链接到 UIButton 的故事板转场 @Qooe 我重写了整个问题,所以它更有意义。我希望我确实正确理解了你想问的问题。如果不是这种情况,请随时在 revisions 中回滚到您的版本 @Matthias Bauch,谢谢。更清楚了。 【参考方案1】:

不。您无法取消直接链接到 UIButton 等界面元素的 segue。

但是有一个解决方法。

    删除链接到按钮的segue 从 viewController(带有按钮的那个)添加一个 segue 到应该被推送的 viewController。这必须是未连接到界面元素的 segue。为此,您可以从状态栏启动 segue。或者在左侧边栏中创建 segue。 选择这个 segue,打开属性检查器并更改 segue 的 Identifier(例如 PushRedViewController) 选择Xcodes assistant view,通过按钮可以看到viewController的.h文件。 将按钮连接到操作。为此,请选择按钮并按住 Control 键拖动到 .h 文件。在菜单中选择操作并命名您的操作(例如 redButtonPressed:) 打开 viewController 的实现

    将步骤 5 中的操作更改为如下所示:

    - (IBAction)redButtonPressed:(id)sender 
        [self performSegueWithIdentifier:@"PushRedViewController" sender:sender];
    
    

【讨论】:

现在可以用于 ios5:***.com/questions/8066525/… 我不太确定如何将它与 Unwind Segues 一起使用,这可能吗?【参考方案2】:

您实际上可以通过在代码中添加以下方法来做到这一点

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender   

if([identifier isEqualToString:@"btnSegue"])


   return YES;

else
    return NO;



假设您的 segue 是 btnSegue。如果您需要根据某些条件执行 segue,您可以使用以下代码

if(check)

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

其中 check 是 BOOL,您可以根据自己的条件设置 true 或 false。

【讨论】:

@TahoeWolverine 谢谢我可能回答的有点晚了:)

以上是关于如何取消连接到 UIButton 的 segue的主要内容,如果未能解决你的问题,请参考以下文章

插座无法连接到重复内容

在代码中将 UIButton 连接到 IBOutlet 和 IBAction

尝试将 UIButton 连接到代码时出现“对象退出”功能

IBOutlet 用于约束并以编程方式将其连接到 UIButton

在自定义视图中连接到 UIButton 的 AddTarget 不起作用。 (斯威夫特 5,iOS)

如何测试 BarButtonItem 是不是连接到正确的 IBAction?