Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在XIB中正确加载和显示自定义UIView?_Ios_Objective C_Uiview_Xib - Fatal编程技术网

Ios 如何在XIB中正确加载和显示自定义UIView?

Ios 如何在XIB中正确加载和显示自定义UIView?,ios,objective-c,uiview,xib,Ios,Objective C,Uiview,Xib,任务很简单: 我们有一个XIB 我们有一个自定义UIView类实现。没有XIB 我们可以向XIB添加感谢IB UIView元素,并将其类设置为自定义UIView类 我们可以创建自定义UIView类的出口,并将自定义UIView从XIB连接到它 但似乎我们应该在加载XIB时执行额外的步骤来显示自定义UIView(及其元素——标签、图像等) 哪一步 UPD:任务已完成。我们应该使用initWithCoder。引用自:«从代码动态创建UIView时调用initWithFrame。从.nib文件加载的视

任务很简单:

  • 我们有一个XIB
  • 我们有一个自定义UIView类实现。没有XIB
  • 我们可以向XIB添加感谢IB UIView元素,并将其类设置为自定义UIView类
  • 我们可以创建自定义UIView类的出口,并将自定义UIView从XIB连接到它
  • 但似乎我们应该在加载XIB时执行额外的步骤来显示自定义UIView(及其元素——标签、图像等)
  • 哪一步
    UPD:任务已完成。我们应该使用initWithCoder。引用自:«从代码动态创建UIView时调用initWithFrame。从.nib文件加载的视图总是使用initWithCoder进行实例化,编码器负责从.nib文件中读取设置。感谢提问。

    如果这些元素不在nib/xib中,您可以在initWithCoder中添加/创建它们:

    您可以执行以下操作:

    //MYCustomView.h
    @interface MYCustomView : UIView
    @end
    
    //MYCustomView.m
    @implementation MYCustomView
    
    - (void)setup {
        // Do custom stuffs here...
    }
    
    - (id)init {
        self = [super init];
        if (self) {
            [self setup];
        }
        return self;
    }
    
    - (id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            [self setup];
        }
        return self;
    }
    
    - (id)initWithCoder:(NSCoder *)aDecoder {
        self = [super initWithCoder:aDecoder];
        if (self) {
            [self setup];
        }
        return self;
    }
    
    @end
    

    你读过课程参考中的“分类UIView”注释吗?您需要通过addSubView以编程方式添加按钮、标签等,或者从故事板或XIB加载视图。如果不使用标准控件,也可以实现drawRect。通常情况下,您不会以这种方式将UIview子类化-您会使用一个由XIB或故事板驱动的UIViewController子类谢谢您的回复。等一下。假设我们有UIView,它已经添加了子视图元素。因为我们可以看到应用程序显示了来自XIB的UIView,所以我们可以得出结论,IB为我们生成了自定义UIView的代码和addSubView。但是为什么我们看不到里面的元素呢?它就像一个简单的链:A->B->C。现在C显示B,但不是A的内部。奇怪。