我有一个名为baseViewUIView,在其中我有initWithFrame,我在其中添加了一些其他视图,并做了一些自定义的东西.同一视图还有一个NIB文件.

现在我有一个名为AppControllerUIViewController类,我想在其中将baseView视图添加到AppController视图的视图中,因此我正在执行以下操作:

self.view = baseView;但问题是NIB文件无法加载.我如何确保定制的东西和NIB文件被加载/运行?

推荐答案

您有很多 Select ,这取决于如何使用"baseView"类并将其集成到应用程序中.不清楚您打算如何使用这个类--作为UIViewController子类中的视图,或者作为一个可重用的模块化组件,意味着要在整个应用程序中多次实例化,以便在许多不同的视图控制器中使用.

如果您的视图应该是UIViewController子类中的唯一视图,那么Phonitive是正确的--将其与UIViewController子类.xib文件Bundle 在一起,并使用UIViewController的viewDidLoad进行最终初始化.

但是,如果您希望View类成为在不同视图控制器中多次重用的子组件,通过代码或包含在另一个控制器的.xib文件中进行集成,则需要同时实现initWithFrame:init方法和wakeFromNib来处理这两种情况.如果您的内部初始化总是包含来自.xib的一些对象,那么在initWithFrame中,您将需要手动加载.xib,以便支持想要通过代码创建小部件的"Customer"类.同样,如果.xib文件包含您的对象,那么您需要确保从wakeFromNib调用任何代码所需的finalization.

下面是一个示例,说明如何使用NIB中的UI设计创建一个UIView子类组件.

MyView.h:

@interface MyView : UIView
{
    UIView *view;
    UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;

我的观点.m:

#import "MyView.h"
@implementation MyView
@synthesize l, view;

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) 
    {
        // Initialization code.
        //
        [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
        [self addSubview:self.view];
    }
    return self;
}

- (void) awakeFromNib
{
    [super awakeFromNib];

    // commenters report the next line causes infinite recursion, so removing it
    // [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:self.view];
}

- (void) dealloc
{
     [l release];
     [view release];
     [super dealloc];
}

以下是nib文件的外观(除非该文件的所有者需要更改为MyView类).

在此处输入图像描述

一定要将视图和标签输出连接到文件所有者.就这样!用于创建可重用UIView小部件的模板.

这种 struct 最巧妙的地方是,你可以把MyView对象的实例放在其他nib文件中,只需把UIView放在你想要的位置/大小,然后把identity inspector(CMD-4)中的类改成MyView,然后砰的一声,你就可以在你想要的任何视图中找到你的小部件的实例了!就像UIKit对象一样,您可以实现委托协议,以便使用小部件的对象可以收到有趣事件的通知,并可以提供数据显示在小部件中,以对其进行自定义.

Ios相关问答推荐

iOS中的分段拾取器—手柄点击已 Select 的项目

如何从ipad获取用户定义的设备名称,IOS版本应大于16在flutter

使用CGAffineTransform旋转视图只起作用一次吗?

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

如何在iOS 17 SwiftUI中获取用户名

Flutter iOS 键盘问题:. TextInputType.number 中缺少字符

如何在 Android 上的 Flutter 应用中录制内部音频?

占位符文本未显示在 TextEditor 上

SwiftUI:同时拖动父视图和子视图,但手指分开

在标签中显示多个计数器但在同一屏幕(Swift,IOS)

PropertyWrapper 不存在的 Codable 属性的默认值

react 在 android 上运行的本机应用程序,但在 iOS 上出现问题,详细信息在描述中共享

SwiftUI:通过Sheet将数据添加到Realm DB时视图不更新

如何在 Swift 3 中根据 UIImage 的大小/比率调整 UIImageView 的大小?

如何以编程方式调用视图控制器?

如何在 iPhone 中为透明的 PNG 图像着色?

如何启用滑动以删除 TableView 中的单元格?

如何将 iPhone OSStatus 代码转换为有用的东西?

正确使用 Alamofire 的 URLRequestConvertible

为给定的 UIColor 获取更亮和更暗的 colored颜色 变化