使用Swift反转手势识别器时,如何在iOS中传回信息?
我是iOS开发新手,而且很敏捷。我在谷歌上找到的很多资源都是用Objective-C编写的,我也不太熟悉 我有两个视图故事板,S1和S2。它们中的每一个都至少有一个视图控制器,分别为VC1和VC2。我使用手势识别器从S1到S2,而不是序列。在S2上,我选择从表视图中获取的数据。当我按下表上列表中的值时,我想将该值发送回S1使用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
使用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?
这应该会奏效;如果遇到问题或不理解部分概念,请告诉我。您是否实现了手势识别器委托方法?如果是,请显示代码。请查看此问题:可能重复的