ios A跳B跳C  C给A传值  怎么传

解决方案 »

  1.   

    楼上:有四种传值方式:委托代理delegate,观察通知notification,代码块block,普通传值passvalue,可以看看这篇博客:https://www.jianshu.com/p/8162375c5660
      

  2.   

    通知 ,代理,block ,属性都可以进行传值
      

  3.   

    1.代理一层一层传
    2.通知直接从C传到A
    3.C的值存本地,到A在从本地取(不推荐)
      

  4.   

    block或者delegate吧,简单还方便。
      

  5.   

    建议用委托,你可以看看delegate 
      

  6.   

    block不能实现直接传值、隔了一个界面、代理也需要一层层回调,最方便的是用通知NSNotificationCenter,
      

  7.   

    很久没回答问题了,但看见这个问题还是想参和一下。跨界面间的参数传递是UI相关app开发的普遍问题,前面的楼层已经给出了一些选项* 逐层透传、回调
    * 消息通知
    * 本地中间人传递
    * ……作为一位老司机,我想说的是,每一种方案在技术上都是可行的,但至于如何选择,“为什么”才是最重要的。首先,对于这种跨多界面传递数据的需求,通常不适合通过逐层透传的方式来处理。理由是:A->B->C这种链条,B来完成A,C的通信会破坏B的封装,导致它知道过多和自己无关的信息,使得它变得难以维护。此外,消息通知看起来是一个不错的选择,但个人并不推荐这种方式。这种机制感觉就像是一个万能药水,无论什么情况都可以通过它来解决。但它带来的问题比它解决的问题要多得多:
    * 传递路径隐式化:消息铺天盖地,到处都能处理消息,但是你要找到消息的来源,是一件非常困难的事情
    * 语义模糊:实际上你可能是想获取一个界面的输入结果(value input in someViewController),但消息是什么鬼?
    * 几乎没有类型约束性:从消息中提取到的数据类型是什么?该转成什么?完全是口口相传的
    * 层次关系模糊:层次在app结构中非常重要,消息方式会导致底层模块也可以轻松收到上层消息,这种‘便利’性很容易诱惑程序员破坏程序结构
    * 调试变得困难:消息传递会导致调用堆栈的上下文信息都是,于是乎,调试变成了瞎猜
    * 无法同步化:因为消息处理通常是异步的,所以类似'willBegin'这种语义变得难以处理,或者容易被忽略那么剩下的方案就不多了,而作为开发者,应当理解业务模型和UI控制器、UI模型是不同的角色,即使是UI,也包含了不同层次的。例如上述的A->B->C的链条
    它们之间的跳转是否可以交给一个视图控制器的控制器(Controller of viewControllers)来处理,假设叫root?例如navigationController就其中一种。
    那么,控制逻辑可以变成:
    1. root 让 A 先显示出来
    2. A 告诉 root 自己完成了,
    3. root 显示 B
    4. B完成,告诉root
    5. root 显示 C
    6. C 获得用户输入,完成,将输入值告诉root (通过delegate或者block等方式,甚至是root直接从C的成员属性中取值都是可以的)
    7. root 将从C 获得的输入告诉 A需要注意的是,这种方案的优势是:
    每个控制器(ViewController)本身更加独立,不会既包含本身的视图控制逻辑,还包含本来应该属于上层的控制逻辑此外,还想提一下另一种可能性,需要传递的数据如果不属于UI模型,而是属于业务模型(Model),则实现方案是完全不一样的1. App启动,实例化Model (很可能是单例,或者全局变量)
    2. App 启动A
    3. 一路跳转到 C
    4. C 获取用户输入,将输入数据赋值给Model
    5. 返回A,A从Model中获取对应数据并进行展示至于使用哪一种方案,主要取决于程序员对程序结构的理解、对业务的理解是否合理。
      

  8.   

    notification通知
      

  9.   

    代理,block。甚至是通知。都可以啊。
      

  10.   

    NotificationCenter
      

  11.   

    跨界面的话用nsnotificationcenter
      

  12.   

    通知,代理,单利,block,本地文件
      

  13.   

    根据问题说明,
    (1)如果仅仅是界面传值,那么 用通知 是最好的,c post特定的通知,a关注此通知。 这样,就和其他界面没有任何关系。
             不过要注意的是,避免代码后续难于维护,通知的名字、传值所使用的数据结构 不要随意化,要和当前项目的定义保持一致的风格。(2)如果传值之后,在特定值下面,界面需要跳转, 就仁者见仁,智者见智了。
            (2-1)如果跳转链是 push出来的, 可以在收到特定值 通知 之后, pop到当前界面即可。 此时不需要block或者委托什么的。
            (2-2)如果涉及到model弹出,那么就需要有地方维护 b, c 的句柄,以便于 界面消失。 此时可以用root manager界面做管理。
            (2-3)如果A-B-C有业务上的强关联,可以用block或者delegate来传递。
      

  14.   

    用通知是最不好的方法,他的可读性差。
    用委托显得繁琐,不是好方法。
    用两个block还算行吧,但是要注意循环引用问题。最好的办法,我认为是A自己共享自己,这样无论是B或C甚至D,都可以轻易访问A中的方法或变量。
    假如你的A类名叫mapUIViewController,那么具体做法是:static mapUIViewController *_shareVC = nil;
    +(mapUIViewController *)shareVC
    {
        return _shareVC;
    }- (void)viewDidLoad {
        [super viewDidLoad];
        _shareVC = self;
    }
    C中如果想用A中的数据,先#import "mapUIViewController.h"
    然后用
    mapUIViewController *A = [mapUIViewController shareVC];此时C或B,有了A的控制器,就可以干任何事情了。传参都是小儿科了。
      

  15.   

    最好用通知或者使用RAC
      

  16.   

    个人认为,UI之间传数据不是一种好的设计模式。跳来跳去就SB了。 UI -数据中心-UI 模式比较好。各司其职,做UI的时候不需要考虑数据传递问题。这样才能把系统分解,就是所谓低耦合。
      

  17.   

    原来爱用delegate,现在爱用block
      

  18.   

    请问我用python打包成的APP 如何通过url scheme调用该app,并且进行传参
      

  19.   

    直接调用    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
      

  20.   

    1.本地存本地读取    2.NSNotificationcenter
      

  21.   

    通知最简单。
    如果是block的话, B要做中转, 并不是说Block不行
      

  22.   

    通知,代理,直接等(因为共用一块内存),block,单例等等
      

  23.   

    通知、delegate、单例、block 都可以传值