Swift协议不会触发Objective C协议方法

Vee

我有一个Swift视图控制器,它定义了一个Objective-C视图控制器应该遵循的协议:

ChildViewController.swift

@objc public protocol ChildViewControllerDelegate {
    func closeChild();
}

@objc public class ChildViewController: UIViewController{

    var delegate: ChildViewControllerDelegate?

    @IBAction func childCloseButton(sender: UIButton) {
       delegate?.closeChild()
    }

}

MainViewController.m

@interface MainViewController () <ChildViewControllerDelegate>

@end

@implementation MainViewController
- (void)viewDidAppear:(BOOL)animated {
    // creating frame for child and placing it on the bottom of the screen
        CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
        CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
        CGFloat yOffset = self.view.frame.origin.y;
        CGFloat childHeight = (8/15) * screenWidth;
        CGRect child = CGRectMake(0, screenHeight - yOffset - childHeight, screenWidth, childHeight);

        // adding storyboard 
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"child" bundle:nil];
        ChildViewController *childVC = [storyboard instantiateViewControllerWithIdentifier:@"childViewController"];
        childVC.view.frame = childBox;
        [self addChildViewController: childVC];
        [self.view addSubview:childVC.view];
}

- (void) closeChild {
    NSLog(@"Why doesn't this get trigger???");
}

@end

当我单击UI上的“ childCloseButton”时,MainViewController.m中的“ closeChild”方法似乎没有被调用。单步调试器,我发现“ delegate”属性ChildViewController.swift设置为nil,但我不明白为什么。有人可以告诉我我所缺少的吗?

西蒙·麦克劳林

ChildViewController正文中的第一行正在创建一个可选属性。直到设置了某些东西,这才是零。这里与委托没有什么独特的关系,这仅仅是面向对象的编程。

以相同的方式设置childVC稍后的frame属性MainViewController,您还需要将委托设置为的实例MainViewController

例如

ChildViewController *childVC = [storyboard instantiateViewControllerWithIdentifier:@"childViewController"];
childVC.view.frame = childBox;
childVC.delegate = self

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与Swift集成Objective C协议

来自分类Dev

Swift中不可见的Objective-C协议方法

来自分类Dev

符合Objective-C协议的Swift类

来自分类Dev

在Objective-C中使用Swift协议

来自分类Dev

Objective-C类中的Swift协议

来自分类Dev

在Swift中实现Objective C协议

来自分类Dev

在Swift上委派Objective-C协议

来自分类Dev

在 Swift 中实现 Objective-C 协议

来自分类Dev

如何创建符合Swift和Objective-C共享协议的类方法?

来自分类Dev

如何使用Swift中的协议公开Objective-C对象的私有类方法?

来自分类Dev

在Objective-C中实现协议特定的方法

来自分类Dev

Objective-C可选协议方法的默认实现

来自分类Dev

Objective-C可选协议方法的默认实现

来自分类Dev

Objective C协议泛型

来自分类Dev

使用getter在Objective-C协议上的Swift 1.2错误

来自分类常见问题

在Objective-C类中导入Swift协议

来自分类Dev

Swift对应的Objective C语法“ extension where self:<某些协议>”

来自分类Dev

在Swift中将字典对象传递给Objective C协议

来自分类Dev

Swift中无法识别Objective-C协议

来自分类Dev

协议内部的Swift协议

来自分类Dev

尝试在Swift中使用用Objective-C编写的委托方法会抛出“找不到协议声明”

来自分类Dev

来自JSONJoy协议的Swift初始化方法不可用作Objective-C选择器

来自分类Dev

尝试在Swift中使用用Objective-C编写的委托方法会抛出“找不到协议声明”

来自分类Dev

JSONJoy协议的Swift初始化方法不可用作Objective-C选择器

来自分类Dev

如何使Swift类符合Objective-C协议,而又不使其暴露于Objective-C?

来自分类Dev

在Swift中将协议实现者升级为协议的通用方法

来自分类Dev

Objective-C协议的默认实现

来自分类Dev

Objective-C协议不发送消息

来自分类Dev

Objective-C对实现协议的对象的引用

Related 相关文章

  1. 1

    与Swift集成Objective C协议

  2. 2

    Swift中不可见的Objective-C协议方法

  3. 3

    符合Objective-C协议的Swift类

  4. 4

    在Objective-C中使用Swift协议

  5. 5

    Objective-C类中的Swift协议

  6. 6

    在Swift中实现Objective C协议

  7. 7

    在Swift上委派Objective-C协议

  8. 8

    在 Swift 中实现 Objective-C 协议

  9. 9

    如何创建符合Swift和Objective-C共享协议的类方法?

  10. 10

    如何使用Swift中的协议公开Objective-C对象的私有类方法?

  11. 11

    在Objective-C中实现协议特定的方法

  12. 12

    Objective-C可选协议方法的默认实现

  13. 13

    Objective-C可选协议方法的默认实现

  14. 14

    Objective C协议泛型

  15. 15

    使用getter在Objective-C协议上的Swift 1.2错误

  16. 16

    在Objective-C类中导入Swift协议

  17. 17

    Swift对应的Objective C语法“ extension where self:<某些协议>”

  18. 18

    在Swift中将字典对象传递给Objective C协议

  19. 19

    Swift中无法识别Objective-C协议

  20. 20

    协议内部的Swift协议

  21. 21

    尝试在Swift中使用用Objective-C编写的委托方法会抛出“找不到协议声明”

  22. 22

    来自JSONJoy协议的Swift初始化方法不可用作Objective-C选择器

  23. 23

    尝试在Swift中使用用Objective-C编写的委托方法会抛出“找不到协议声明”

  24. 24

    JSONJoy协议的Swift初始化方法不可用作Objective-C选择器

  25. 25

    如何使Swift类符合Objective-C协议,而又不使其暴露于Objective-C?

  26. 26

    在Swift中将协议实现者升级为协议的通用方法

  27. 27

    Objective-C协议的默认实现

  28. 28

    Objective-C协议不发送消息

  29. 29

    Objective-C对实现协议的对象的引用

热门标签

归档