【问题标题】:Need To Pass The Value From B Viewcontroller to A Viewcontroller Using Objective C? [duplicate]需要使用 Objective C 将值从 B Viewcontroller 传递到 A Viewcontroller? [复制]
【发布时间】:2016-01-05 04:51:40
【问题描述】:

我正在努力将方法从viewController B 调用到viewController A。需要调用viewController B关闭按钮点击Dismissviewcontroller然后立即需要调用一个方法并想在viewController A上传递两个字符串值。就像逆过程。

仅供参考:我正在使用 Storyboard 并为 B 提供 viewController。A 是 mainviewcontroller

【问题讨论】:

标签: ios objective-c iphone uiviewcontroller


【解决方案1】:
  • 在控制器A中使用viewWillAppear

  • 从控制器B 发布通知并添加 控制器上的观察者A

在控制器B 关闭按钮上发布通知 [[NSNotificationCenter defaultCenter] postNotificationName:"NAME" object:nil userInfo:nil];

在控制器A上添加观察者:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(perform:) name:@"NAME" object:nil];

  • 在 控制器B 并在控制器A 上实现它,所以一旦你点击 在关闭按钮控制器B 上,只需调用代理并执行您想要的任何操作。
  • 实现KVO

【讨论】:

  • 请提供一些示例代码。我在目标 C 方面很少,所以请!
【解决方案2】:

最简单但不是最有效的方法是创建viewController AviewController A 视图的全局对象确实加载方法 调用该全局变量并使其等于 self 和 然后从viewController B解雇

会使用

[self dismissViewControllerAnimated:YES completion:^{


  // here you can create a code for calling the global **viewController A** object to call the function you need

}];

结论:

viewController A 头文件中:

extern A* AGlobalInstance;

#import "A.h"下方的A.m文件中

A* AGlobalInstance;

viewDidLoad

- (void)viewDidLoad {
  [super viewDidLoad];
  AGlobalInstance = self;
}

然后在 B.m 按钮中使用

[self dismissViewControllerAnimated:YES completion:^{
    [AGlobalInstance function];
 }];

但是你必须先去A viewController 才能去B 让它工作

【讨论】:

  • 这是客观 c >__
【解决方案3】:

由于上述答案建议您使用代表和通知,所以我不会建议您使用这些。除了他们,我想请你去Block

typedef void(^valueHandler)(id anyObject1, id anyObject2);

@viewController A

B *instanceOfB;
[instanceOfB setValueHandlerBlock^(id anyObject1, id anyObject2) {
// Here you can receive the values.
}];

@viewController B

@property (nonatomic, copy) valueHandler valueHandlerBlock;

//To pass the value
if (valueHandlerBlock) {
    valueHandlerBlock(@"a String value", anArray);
    // When ever the above line will execute it will pass the values to view controller A.
}

【讨论】:

  • 你确定他不需要先在 B 视图控制器中将 instanceOfB 设置为等于 self ,将它们连接在一起吗?
  • typedef 我想放在哪里?@Tapas Pal
  • @Sanju 你可以添加任何我的意思是全球可访问的地方。但在这种情况下,您可以在 .h 文件中的@viewController B 接口顶部添加。
【解决方案4】:

传递值有很多选择

  1. 使用协议和委托
  2. 使用展开转场
  3. 使用通知

还有很多其他选项可以在以上几点上做同样的谷歌,你会得到大量的演示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多