如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程

Posted

技术标签:

【中文标题】如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程【英文标题】:how to push a swift view controller from objective-c class and pass data back and continue the next process in objective c class 【发布时间】:2019-09-29 04:06:10 【问题描述】:

我想从我的目标 C uiviewcontroller 推送 swift UIViewController 并等待该 viewcontroller 发回数据。我该怎么做。

我尝试在 swift 中使用协议/委托,但它会引发错误,因为它在 objc .h 文件中不可用,即使我正在导入“Pass-swift.h”桥接头文件。

我很好奇是否可以使用完成块,如果可以,那么如何?或任何其他方法?

//Parentviewcontroller.m file


- (void)sendNextbutton:(id)sender

UIViewController *vc = [[SecurityQuestionViewController alloc] init];

[self.navigationController pushViewController:vc animated:YES];

// I want below signup  function to calll after getting data back from vc viewcontoller
[self singupWithSecurityQuestion];

// .h 文件

#import  "PassSDK-Swift.h"


@interface ParentViewController : UIViewController <MyProtocol>

@end

//SecurityQuestionViewController.swift

 @objc protocol MyProtocol 
   func setResultofSecurityQuestion(valueSent: [NSDictionary])
 

@objc public class SecurityQuestionViewController: UIViewController
    
  var delegate: MyProtocol?

@objc func didTapSubmitButton(sender: UIButton)
    let data: [NSDictionary] = getQuesDictionary()
    print(data)
    delegate?.setResultofSecurityQuestion(valueSent: data)
    navigationController?.popViewController(animated: true)
    dismiss(animated: true, completion: nil)
  


//我应该将数据返回给 ParentViewController,它应该等待 swift view controller 发回数据,然后它应该转到下一个函数/方法 - singupWithSecurityQuestion。

【问题讨论】:

根据经验,尝试在任何地方添加@objc:在func 之前、var delegate 之前——看看是否有帮助。 【参考方案1】:

所以答案是使用

       @objc protocol MyProtocol: class 
  func setResultofSecurityQuestion(valueSent: [NSDictionary])
          

到处都是@objc

【讨论】:

以上是关于如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器

IOS / Objective-C / Storyboard:推送视图控制器的后退按钮未激活

SideMenu 警告:尝试快速从其 navigationController == nil 推送视图控制器

Objective-C:如何将信号从视图发送到视图控制器以更改视图?

发送数据时如何更新视图控制器而不是推送视图控制器?

如何关闭视图控制器并快速弹出到根视图控制器?