如何从 objective c 调用 swift 方法
How to call swift method from objective c
我在 swift 中使用 xib 文件创建了自定义对话框
现在我想使用 objective c 文件中的那个对话框
我可以显示对话框,但无法收听按钮
的点击事件
我的Swift代码就像
public class CustomVerificationDialog:UIView,UITextFieldDelegate
{
///Othere stuffs
var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked
@IBAction func onClickBtnRight(_ sender: Any)
{
if self.onClickRightButton != nil
{
self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
}
}
}
现在我可以在 swift 中获取点击事件
dialogForVerification.onClickRightButton =
{ (text1:String,text2:String) in
}
但是我不知道怎么听 objective c
CustomVerificationDialog *dialogVerification = [CustomVerificationDialog showCustomDialog];
???
你可以试试
[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {
}];
这是一个Demo
为了访问 swift class 及其在 objective-c 文件中的 methods/properties,您需要用 @objc 标记 class/method/property。然后您需要在 objective-c 文件中导入 "TargetName-Swift.h" 以便访问 objective-c 文件中的 swift 代码。这是有望解决您问题的代码片段:
将您的 swift class 替换为:
@objc public class CustomVerificationDialog:UIView,UITextFieldDelegate
{
@objc var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked
@IBAction func onClickBtnRight(_ sender: Any)
{
if self.onClickRightButton != nil
{
self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
}
}
//other code goes here
}
并在您的 objective-c 文件中(即 viewController)
#import "YourTargetName-Swift.h"
...................
................
CustomVerificationDialog *dialogVerification = [CustomVerificationDialog showCustomDialog];
[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {
}];
// other code here
.................
..................
我在 swift 中使用 xib 文件创建了自定义对话框 现在我想使用 objective c 文件中的那个对话框 我可以显示对话框,但无法收听按钮
的点击事件我的Swift代码就像
public class CustomVerificationDialog:UIView,UITextFieldDelegate
{
///Othere stuffs
var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked
@IBAction func onClickBtnRight(_ sender: Any)
{
if self.onClickRightButton != nil
{
self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
}
}
}
现在我可以在 swift 中获取点击事件
dialogForVerification.onClickRightButton =
{ (text1:String,text2:String) in
}
但是我不知道怎么听 objective c
CustomVerificationDialog *dialogVerification = [CustomVerificationDialog showCustomDialog];
???
你可以试试
[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {
}];
这是一个Demo
为了访问 swift class 及其在 objective-c 文件中的 methods/properties,您需要用 @objc 标记 class/method/property。然后您需要在 objective-c 文件中导入 "TargetName-Swift.h" 以便访问 objective-c 文件中的 swift 代码。这是有望解决您问题的代码片段:
将您的 swift class 替换为:
@objc public class CustomVerificationDialog:UIView,UITextFieldDelegate
{
@objc var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked
@IBAction func onClickBtnRight(_ sender: Any)
{
if self.onClickRightButton != nil
{
self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
}
}
//other code goes here
}
并在您的 objective-c 文件中(即 viewController)
#import "YourTargetName-Swift.h"
...................
................
CustomVerificationDialog *dialogVerification = [CustomVerificationDialog showCustomDialog];
[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {
}];
// other code here
.................
..................