从UIViewController实例化UIView子类

阿德里安

我发现了一个教程,该教程完全可以在我现有的Objective-C项目中完成我想做的事情,但是它是用Swift编写的。我了解Swift中的所有内容,但遇到了一个噩梦般的时光,将“UIView's初始化”转换为“ Objective-C”。这应该非常简单,但是我无法弄清楚。

我的代码不会崩溃,但是不会加载任何东西。UIViewController当我尝试加载UIView子类时,我在其中设置了一个断点,以查看发生了什么,这是我所看到的:

(lldb) po self.boxSize
75

(lldb) po self.holderView.frame
(origin = (x = 0, y = 0), size = (width = 0, height = 0))
 (origin = (x = 0, y = 0), size = (width = 0, height = 0))

(lldb) po self.holderView
 nil

这是我试图在Objective-C中“复制”的视图。

HolderView.swift:

class HolderView: UIView {

    var parentFrame :CGRect = CGRectZero

    weak var delegate:HolderViewDelegate?

    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = Colors.clear
    }

    required init(coder: NSCoder) {
        super.init(coder: coder)
    }
    // A bunch of class methods
}

这是我的“翻译”的Objective-C .h / .m文件:

HolderView.h:

#import <UIKit/UIKit.h>

@protocol HolderViewDelegate <NSObject>
// delegate methods
@ end

@interface HolderView : UIView

@property (nonatomic, weak) id <HolderViewDelegate> delegate;

@property (nonatomic) CGRect frame;
@property (nonatomic) CGRect parentFrame;

HolderView.m:

- (instancetype)initWithFrame:(CGRect)frame
{
    self.parentFrame = CGRectZero;
    self = [super initWithFrame:frame];
    if (self) {
        [super setFrame:self.parentFrame];
        self.backgroundColor = [UIColor orangeColor]; // Added to see if it's working
        NSLog(@"anyone home?");
    }
    return self;
}

这是Swift和Objective-CUIViewControllers添加以下代码的代码UIView

ViewController.swift

  func addHolderView() {
    let boxSize: CGFloat = 75.0
    holderView.frame = CGRect(x: view.bounds.width / 2 - boxSize / 2,
                              y: view.bounds.height / 2 - boxSize / 2,
                              width: boxSize,
                              height: boxSize)
    holderView.parentFrame = view.frame
    holderView.delegate = self
    view.addSubview(holderView)
    holderView.addOval()
  }

这是我的“翻译后的” Objective-C视图控制器:

- (void)addHolderView {
    self.boxSize = 75.0; // I added as a global variable, as local returned NULL when I tried locally
    self.holderView.frame = CGRectMake(self.view.bounds.size.height / 2 - self.boxSize / 2,
                                       self.view.bounds.size.width / 2 - self.boxSize / 2,
                                       self.boxSize,
                                       self.boxSize);

    self.holderView.parentFrame = self.view.frame;
    self.holderView = [self.holderView initWithFrame:self.holderView.frame];    

    self.holderView.delegate = self;

    NSLog(@"addHolderView called");
    [self.view addSubview:self.holderView];
}

感谢您的阅读。

汤姆·基德

这段代码怎么样。

- (void)addHolderView {
    self.boxSize = 75.0; // I added as a global variable, as local returned NULL when I tried locally
    CGRect frame = CGRectMake(self.view.bounds.size.height / 2 - self.boxSize / 2,
                                       self.view.bounds.size.width / 2 - self.boxSize / 2,
                                       self.boxSize,
                                       self.boxSize);

    self.holderView = [[HolderView alloc] initWithFrame: frame];   
    self.holderView.parentFrame = self.view.frame;

    self.holderView.delegate = self;

    NSLog(@"addHolderView called");
    [self.view addSubview:self.holderView];
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从UIView子类调用UIViewController?

来自分类Dev

Xcode 7 Swift 2无法实例化通用UITableViewController的UIViewController子类

来自分类Dev

UIViewController子类的便捷初始化程序,带有来自笔尖的实例?

来自分类Dev

超类子类实例化

来自分类Dev

无法实例化NSManagedObject的子类

来自分类Dev

UIViewController的子类所需的初始化程序

来自分类Dev

为什么使用UIViewController和UIView子类UIResponder?

来自分类Dev

在UIView子类中声明的委托在UIViewController中不起作用?

来自分类Dev

如何从UIView子类推送或呈现UIViewcontroller或情节提要?

来自分类Dev

使用委托将数据从UIView子类发送到UIViewController

来自分类Dev

UIViewController扩展可从情节提要实例化

来自分类Dev

智能地实例化父类的子类

来自分类Dev

在子类中强制对象的实例化

来自分类Dev

该子类如何实例化自身?

来自分类Dev

基于参数实例化不同的子类

来自分类Dev

如何在 Swift 中从其 ViewController 获取 UIView 子类实例

来自分类Dev

Swift中UIViewController的子类成员的双重初始化

来自分类Dev

UIViewController-分配和初始化与实例化?

来自分类Dev

以编程方式实例化UIViewController,而无需使用笔尖

来自分类Dev

直接从xib文件中实例化UIViewController哪个更好?

来自分类Dev

以编程方式实例化UIViewController,而无需使用笔尖

来自分类Dev

直接从xib文件中实例化UIViewController哪个更好?

来自分类Dev

使用StoryboardID访问UIViewController而不实例化它

来自分类Dev

实例化超类的python中的子类化

来自分类Dev

关于何时从php中的子类实例化父项的困惑

来自分类Dev

可以使子类仅通过静态属性实例化

来自分类Dev

从超类实例化一个子类

来自分类Dev

如何使用父类实例化抽象子类

来自分类Dev

实例化JNA结构的子类将引发IllegalAccessException

Related 相关文章

  1. 1

    如何从UIView子类调用UIViewController?

  2. 2

    Xcode 7 Swift 2无法实例化通用UITableViewController的UIViewController子类

  3. 3

    UIViewController子类的便捷初始化程序,带有来自笔尖的实例?

  4. 4

    超类子类实例化

  5. 5

    无法实例化NSManagedObject的子类

  6. 6

    UIViewController的子类所需的初始化程序

  7. 7

    为什么使用UIViewController和UIView子类UIResponder?

  8. 8

    在UIView子类中声明的委托在UIViewController中不起作用?

  9. 9

    如何从UIView子类推送或呈现UIViewcontroller或情节提要?

  10. 10

    使用委托将数据从UIView子类发送到UIViewController

  11. 11

    UIViewController扩展可从情节提要实例化

  12. 12

    智能地实例化父类的子类

  13. 13

    在子类中强制对象的实例化

  14. 14

    该子类如何实例化自身?

  15. 15

    基于参数实例化不同的子类

  16. 16

    如何在 Swift 中从其 ViewController 获取 UIView 子类实例

  17. 17

    Swift中UIViewController的子类成员的双重初始化

  18. 18

    UIViewController-分配和初始化与实例化?

  19. 19

    以编程方式实例化UIViewController,而无需使用笔尖

  20. 20

    直接从xib文件中实例化UIViewController哪个更好?

  21. 21

    以编程方式实例化UIViewController,而无需使用笔尖

  22. 22

    直接从xib文件中实例化UIViewController哪个更好?

  23. 23

    使用StoryboardID访问UIViewController而不实例化它

  24. 24

    实例化超类的python中的子类化

  25. 25

    关于何时从php中的子类实例化父项的困惑

  26. 26

    可以使子类仅通过静态属性实例化

  27. 27

    从超类实例化一个子类

  28. 28

    如何使用父类实例化抽象子类

  29. 29

    实例化JNA结构的子类将引发IllegalAccessException

热门标签

归档