使用Swift反转手势识别器时,如何在iOS中传回信息?

使用Swift反转手势识别器时,如何在iOS中传回信息?,ios,swift,ios8,storyboard,uigesturerecognizer,Ios,Swift,Ios8,Storyboard,Uigesturerecognizer,我是iOS开发新手,而且很敏捷。我在谷歌上找到的很多资源都是用Objective-C编写的,我也不太熟悉 我有两个视图故事板,S1和S2。它们中的每一个都至少有一个视图控制器,分别为VC1和VC2。我使用手势识别器从S1到S2,而不是序列。在S2上,我选择从表视图中获取的数据。当我按下表上列表中的值时,我想将该值发送回S1 使用Swift的最佳方法是什么?谢谢 您可以使用NSNotificationCenter进行此操作 在S1中添加observer NSNotificationCenter.d

我是iOS开发新手,而且很敏捷。我在谷歌上找到的很多资源都是用Objective-C编写的,我也不太熟悉

我有两个视图故事板,S1和S2。它们中的每一个都至少有一个视图控制器,分别为VC1和VC2。我使用手势识别器从S1到S2,而不是序列。在S2上,我选择从表视图中获取的数据。当我按下表上列表中的值时,我想将该值发送回S1


使用Swift的最佳方法是什么?谢谢

您可以使用NSNotificationCenter进行此操作

在S1中添加observer

NSNotificationCenter.defaultCenter().addObserver(self, selector: "NotificationMethod:", name:"NotificationName", object: nil)

func NotificationMethod(notification: NSNotification){
    //Take Action on Notification
}
从S2 tableview调用它,单击并传递userInfo

NSNotificationCenter.defaultCenter().postNotificationName("NotificationName", object: nil)

您可以使用自定义协议技术

在S1中写入

@IBOutlet var textField: UITextField! 
@IBOutlet var datalbl: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBarHidden = true

}

func myMethod(text:String){
    datalbl.text = text
}

@IBAction func nextViewBtn(sender:UIButton){
    let nextObjvc = self.storyboard?.instantiateViewControllerWithIdentifier("S2") as! S2
    nextObjvc.delegate = self
    self.navigationController?.pushViewController(nextObjvc, animated: true)
}
在S2中写入

@IBOutlet var fullNameLabel: UILabel!
var str:String = String()
var myArray:NSArray = NSArray()
var delegate:myProtocol?

override func viewDidLoad() {
    super.viewDidLoad()

    myArray = ["APPLE","BLACKBERRY","CANON","DELEGAT","EMIT","FLAG","GENERAL"]

    self.fullNameLabel.text = str
}

希望它能完全帮助您。

这方面的首选方法是使用,例如告诉
S2
S1
报告

另一个答案试图说明这一点,但没有弄清楚到底发生了什么

这样做的目的是让
S2
保存对
S1
的引用并报告。你不用segues,这很方便;他们会让它变得更加复杂

协议 您可以通过创建一个用于通信的

protocol ReportBackProtocol {
  func reportValues(someValues : SomeType)
}
S1
S1
中,您实现了
ReportBackProtocol
,如下所示:

class S1 : UIViewController, ReportBackProtocol {

// all your S1 class things


func reportValues(someValues : SomeType) {


   // do with the values whatever you like in the scope of S1
}
 weak var delegate : ReportBackProtocol?
并将您的
S1
实例指定为创建它的
S2
实例的代表,然后再演示它:

let s2 = S2()
s2.delegate = self
// present it as you already do
S2
S2
中,无论您在何处编译了值(我们称它们为
x
),并准备将它们发回:

self.delegate?.reportValues(x)
您还需要将委托实例变量添加到
S2
,如下所示:

class S1 : UIViewController, ReportBackProtocol {

// all your S1 class things


func reportValues(someValues : SomeType) {


   // do with the values whatever you like in the scope of S1
}
 weak var delegate : ReportBackProtocol?

这应该会奏效;如果遇到问题或不理解部分概念,请告诉我。

您是否实现了手势识别器委托方法?如果是,请显示代码。请查看此问题:可能重复的