【问题标题】:How can I create a custom view in XIB with different init method?如何使用不同的 init 方法在 XIB 中创建自定义视图?
【发布时间】:2012-09-04 07:46:14
【问题描述】:

我知道如何在 xib 中布局和创建 UIView,
但现在我有一个自定义视图(UIView 的子视图),
它有不同的初始化方法,例如:

-(id)initWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...

+(id)viewWithArg1:(int) arg2:(NSString *) arg3:(NSArray *) ...

当我在 xib 属性栏中将视图的类设置为我的时,
我的自定义初始化方法没有出现,无处可设置。

那怎么办?非常感谢。

【问题讨论】:

    标签: objective-c ios xib


    【解决方案1】:

    您需要覆盖 initWithCoder: 并使用一些合理的默认值来完成指定的初始化程序正在执行的操作。

    例如

    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        if (self = [super initWithCoder:aDecoder]) {
            _value1 = 0;
            _value2 = @"Hi!";
            /* and so on */
        }
    
        return self;
    }
    

    【讨论】:

      【解决方案2】:

      卡尔是正确的。

      本质上,如果一个对象是从 XIB 实例化的(按照您在问题中提到的步骤),那么被调用的初始化程序是

      - (id)initWithCoder:(NSCoder *)aDecoder;
      

      您可以自己确认这一点,方法是覆盖所有可能的初始化程序并在所有初始化程序中放置断点以查看调用了哪个。

      所以,如果您从 XIB 初始化,它暗示您将拥有该对象的一个​​实例(不一定如此);但是,如果您需要大量自定义对象的实例,那么您可能会考虑返回自定义初始化程序并通过以编程方式创建所有内容来放弃 XIB 工作。

      本质上,想想你将如何使用这个对象。这将告诉您是否需要考虑以编程方式创建自己的视图的自定义初始化程序。

      【讨论】:

      • 是的,我认为它可以通过确认 并实现该方法来工作。我需要的只是布局我的视图,我可以通过编程设置其他变量。此外,我可以将它们设置为可见,如 UIKit 中的标准对象,设置标签的文本、颜色或其他内容吗?谢谢。
      • 很高兴能帮上忙。标记和接受也总是有很长的路要走;-)
      【解决方案3】:

      我认为您不需要在 xib 中设置init 方法,在其他地方您只需通过以下代码调用init

      [[yourView alloc] initWithArg1:arg1 Arg2:arg2];
      

      【讨论】:

      • 那么他将如何在笔尖中使用他的视图?
      猜你喜欢
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多