【问题标题】:How to call swift method from objective c如何从目标c调用快速方法
【发布时间】:2019-01-11 06:46:10
【问题描述】:

我已经用 xib 文件快速创建了我的自定义对话框 现在我想使用来自目标 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
                }

但我不知道如何在客观 c 中听它

CustomVerificationDialog *dialogVerification =  [CustomVerificationDialog showCustomDialog];
???

【问题讨论】:

    标签: ios swift callback objective-c-blocks bridge


    【解决方案1】:

    你可以试试

    [dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {
    
    }];
    

    这是Demo

    【讨论】:

    • 不它不工作它说没有可见的@interface for 'CustomVerificationDialog' 声明选择器'setOnClickRightButton:'
    • 你测试了吗???? set 附加在属性中,见附件演示
    • 是的,它在清理并重建项目后工作。第一次向我显示编译时错误,但在重建错误之后感谢 Sh_Khan..
    【解决方案2】:

    为了访问objective-c 文件中的任何swift 类及其方法/属性,您需要使用@objc 标记该类/方法/属性。然后你需要在你的objective-c文件中导入“TargetName-Swift.h”,以便访问objective-c文件中的swift代码。这是希望解决您的问题的代码 sn-p:

    将您的 swift 类替换为:

        @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
    .................
    ..................
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2019-07-05
      相关资源
      最近更新 更多