但是,这里有一个这样的问题:
我们假设现场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 – 如何在放松行动之前做些什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)