ios – 如何在放松行动之前做些什么?

ios – 如何在放松行动之前做些什么?,第1张

概述我刚才弄清楚了什么是放松时间,以及如何使用它从 this问题的伟大答案.非常感谢. 但是,这里有一个这样的问题: 我们假设现场B中有一个按钮可以将场景A解开,并且在它之前我想要完成某些 *** 作,例如将数据保存到数据库.我在B.swift中为这个按钮创建了一个动作,但是它似乎直接进入场景A,而不需要指定动作. 任何人都知道为什么或如何做到这一点? 谢谢. 您可以按照您所描述的方式执行此 *** 作,或者在您正在 我刚才弄清楚了什么是放松时间,以及如何使用它从 this问题的伟大答案.非常感谢.

但是,这里有一个这样的问题:

我们假设现场B中有一个按钮可以将场景A解开,并且在它之前我想要完成某些 *** 作,例如将数据保存到数据库.我在B.swift中为这个按钮创建了一个动作,但是它似乎直接进入场景A,而不需要指定动作.

任何人都知道为什么或如何做到这一点?

谢谢.

解决方法 您可以按照您所描述的方式执行此 *** 作,或者在您正在展开的vIEwController中使用prepareForSegue overrIDe函数:
@IBAction func actionForUnwindbutton(sender: AnyObject) {    println("actionForUnwindbutton");}

要么…

overrIDe func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {    println("prepareForSegue");}

第一个例子是你所描述的.该按钮连接到展开区域,并在Interface Builder中连接到按钮 *** 作.按钮 *** 作将在segue *** 作之前触发.也许您没有将 *** 作连接到界面构建器中的按钮?

第二个例子使您可以访问segue的sourceVIEwController和destinationVIEwController,以防万一也很有用(您也可以在目的地视图控制器中的unwind segue的功能中获得这些).

如果要延迟展开顺序,直到按钮的本地动作完成,您可以使用self.performSegueWithIDentifIEr(或按照wrus61的建议)直接从按钮 *** 作调用segue(而不是在故事板中挂起)

编辑

你似乎有一些怀疑,无论您是否可以通过将您的按钮连接到放卷和按钮 *** 作来实现.我已经建立了一个这样的测试项目:

class BlueVIEwController: UIVIEwController {    @IBAction func actionForUnwindbutton(sender: AnyObject) {        println("actionForUnwindbutton");    }    overrIDe func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {        println("prepareForSegue");    }}class RedVIEwController: UIVIEwController {    @IBAction func unwindToRed(sender: UIStoryboardSegue) {        println("unwindToRed");    }}

BlueVIEwController有一个按钮,在故事板中连接到BindH的展开卷展开和动作ForUnwindbutton按钮.它也覆盖了prepareForSegue,所以我们可以记录播放顺序.

输出:

actionForUnwindbuttonprepareForSegueunwindToRed

故事板:

编辑2

您的演示项目显示这不工作.不同之处在于您正在使用barbuttonItem触发 *** 作,而我正在使用常规按钮. barbuttonItem失败,而常规按钮成功.我怀疑这是由于消息传递顺序的差异(以下是推测,但符合观察到的行为):

(A)视图控制器中的UIbutton

VIEwController的按钮接收到touchupInsIDe
– (1)向该方法发送动作
– (2)向故事板发送segue展开动作
收到的所有消息和按此顺序执行的方法:

actionForUnwindbuttonprepareForSegueunwindToRed

(B)导航控制器工具栏中的UIbarbuttonItem

工具栏buttonItem接收touchupInsIDe
– (1)向故事板段发送segue展开动作
– (2)(可能的话)将action发送给vIEwController的方法

执行顺序是

prepareForSegueunwindToRedactionForUnwindbutton

prepareForSegue和展开收到的消息.然而actionForUnwindbutton消息被发送到nil,因为vIEwController在segue期间被销毁.所以它不会执行,日志打印

prepareForSegueunwindToRed

在(B)的情况下,vIEwController在方法到达之前被销毁,所以不会被触发

所以看来你的选择是…
(a)使用UIbutton与动作和放松segue
(b)使用prepareForSegue触发您的 *** 作,这将在vIEwController仍然存在时触发,并在segue发生之前触发.
(c)不要使用放卷,只需使用按钮 *** 作.在动作方法中,您可以通过在导航控制器上调用popToVIEwController来“展开”.

顺便说一下,如果在vIEwController上实现了一个工具栏(不使用导航控制器的工具栏),结果是一样的:首先触发segue,因此按钮 *** 作失败.

总结

以上是内存溢出为你收集整理的ios – 如何在放松行动之前做些什么?全部内容,希望文章能够帮你解决ios – 如何在放松行动之前做些什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1113514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存