永发信息网

ios怎么通过界面传递viewcontroller对象

答案:1  悬赏:60  手机版
解决时间 2021-11-20 00:15
ios怎么通过界面传递viewcontroller对象
最佳答案
一般方法
1)采用代理模式 子viewcontroller设计 代理协议,定义协议接口,父viewcontroller 实现协议接口,实现子viewcontroller 退出时将相关数据更新到父视图。
2)采用iOS的消息机制 父viewcontroller注册消息 子viewcontroller 发送消息,触发父viewcontroller的消息处理。
3)采用database做为数据中间的存储媒介,子viewcontroller将状态数据存入DB,父viewcontroller从DB获取数据更新view。
4)采用ios的NSDefault 存储
5)通过AppDelegate 中定义全局变量实现中间数据的存储。

UIViewController和UIViewController之间的交互

UIViewController之间,是否需要交互,怎样交互?这个问题困扰我一段时间了,凭空的去想象,其实很难想明白,尤其是在短时间内。最好的办法,还是在持久的编码/读代码的过程中,根据不同的使用场合及使用需求,来学习体会。

顺便还想说一句,图形界面编程,最基本的编程思路和方法都是类似的,如果你熟悉不止一种图形SDK,你就会发现其实它们都是触类旁通的。最近我就游走于cocoa和qml之间,再加上之前qtwidget、gtk、clutter的编程经验,我发现使用这些不同的sdk,对于我个人的编程技能的增长,很好的起到了互补的作用。

假设使用UINavigationController进行导航,有两层界面结构,都使用自定义UIViewController的子类,分别为level1ViewController和level2ViewController。

1 单向交互。
第一级level1ViewController负责创建第二级level2ViewController,并且设置level2ViewController相关的属性,然后pushlevel2ViewController。伪代码如下:
view plainprint?
[[level2ViewController alloc] init];

[level2ViewController setProp_1];
[level2ViewController setProp_2];
[level2ViewController setProp_3];

[level1ViewController. navigationController
pushViewController:level2ViewController];

[level2ViewController release];

这种情况下,从level1ViewController的角度来看,它只需要初始化level2ViewController,设置它的一些属性,调用push,然后就什么都不用管了。从level2ViewController的角度来看,当它被push后,在它的生命期内,都不会影响level1ViewController,不需要调用level1ViewController的函数,也没有事件需要通知level1ViewController。

这是最简单的使用情形,也是最理想化的。在项目设计阶段,应该尽量把代码设计成这种结构(仅仅是尽量,并不是必须。而且,也并不是所有的使用场景都都可以设计成这样的结构,毕竟这个太理想化了)。

2 双向交互,共享数据
level1ViewController和level2ViewController使用共同的一个数据shareData(一定要理解这里“共同”的含义------两个controller共享同一个数据,并且都有可能进行读写操作,尤其是写操作。如果level2ViewController只对数据进行读操作,那其实就跟前面1中的情形是一致的)。第一级level1ViewController负责创建第二级level2ViewController,并且设置level2ViewController相关的属性,同时还要把shareData传递给level2ViewController,然后pushlevel2ViewController。伪代码如下:
view plainprint?
[[shareData alloc] init];  

[[level2ViewController alloc] init];

[level2ViewController setProp_1];
[level2ViewController setProp_2];
[level2ViewController setData: shareData];

[level1ViewController. navigationController
pushViewController:level2ViewController];

[level2ViewController release];
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
细爷怎么了?怎么一脸忧伤
求一首英文歌名,歌词高潮翻译成中文大概是:
40岁女性拎水桶闪到腰,然后一直腰椎痛是什么
江苏镇江京口区谷阳路208号在哪,或者有这地
因做生意亏损 ,导致信用卡用了,无力还,会有什
工业用水的标准酸碱度是多少啊
启禀将军,敌军共有一百三十万人马,我军还剩
预算不高,1300左右,打算买一张可以玩1080P
45是哪个好国家区号
酶标仪用的96孔紫外板哪里有?
朋友都说诚乾贷安全,收益好,还有风险保证金
国茂减速机
如果是钢材热喷锌 每平方米的成本大概是多少
打架骑在对方身上掐脖子有刑事责任吗
寿光市古城国土所地址好找么,我有些事要过去
推荐资讯
烟叶等级中的桔,和柠是什么意思?
智能停车有哪些?
吃伊马替尼是在化疗吗
我们像那春笋是什么歌
梦见我叔和我堂哥吵架是什么意思
开通超级会员15个月腾讯会员15个月红钻15个月
求音乐:u u u潘玮柏 mp3 下载
16乘24点阵,一屏24行每行80个汉字,保存一屏汉
腌制咸带鱼的制作方法
原63集团军188师562团的网站是什么?
合同纠纷案件求助
美擒五代路亚竿能装纺车轮吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?