使用 IBOutlets 将视图控制器初始化为自定义视图

Posted

技术标签:

【中文标题】使用 IBOutlets 将视图控制器初始化为自定义视图【英文标题】:Initialising view controller with IBOutlets to custom views 【发布时间】:2015-07-21 09:53:41 【问题描述】:

我正在尝试找到一种方法来将具有 IBOutlets 的视图控制器初始化为我在 XIB 中创建的自定义视图。

这是我初始化类的代码:

MyContentViewController *pageContentViewController = [[MyContentViewController alloc] init];
self.pageContent = pageContentViewController;
[pageContentViewController view];

MyContentViewController 具有以下属性:

 @interface MyContentViewController : UIViewController

 @property (nonatomic, weak) IBOutlet MyContentView *topLeftView;
 @property (nonatomic, weak) IBOutlet MyContentView *topRightView;
 @property (nonatomic, weak) IBOutlet MyContentView *bottomLeftView;
 @property (nonatomic, weak) IBOutlet MyContentView *bottomRightView;

在 MyContentViewController xib 中,我有 4 个视图,我已将它们设置为 MyContentView,并将上面的 IBOutlet 与情节提要中的视图挂钩。

自定义视图定义如下:

#import <UIKit/UIKit.h>

@interface MyContentView : UIView

@property (nonatomic, strong) IBOutlet UILabel *labelView;

 @end

但是,当我运行应用程序时,我得到了在 MyContentViewController xib 中添加的 4 个视图。但是,它们都没有显示来自自定义 UIView 的 UILabel。

我在 MyContentView 中添加了以下内容:

- (void)awakeFromNib 
    NSLog(@"VIEW AWAKE");

这会被打印出来,以便加载视图。但是,我怎样才能让它们使用 4 个 IBOutlets 显示。

这是应用视图运行的图片。 4 个视图上没有标签:

【问题讨论】:

嗨,你可以试试这个语句:MyContentViewController *vc = [[MyContentViewController alloc] initWithNibName:@"YouXib" bundle:nil]; 感谢您的评论。但是,它正在加载问题所在的 MyContentView。激光链接包含了答案。 【参考方案1】:

我看到您的“MyContentView”有一个自己的 nib。从另一个 nib 加载具有 nib 布局的自定义 UIView 类有点复杂。

我认为这个blog post 包含了答案

【讨论】:

谢谢。该链接确实包含答案。

以上是关于使用 IBOutlets 将视图控制器初始化为自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

在为自定义视图调用 NSBundle(使用 loadNibName)后访问 IBOutlets 的最佳方法

我的游戏视图控制器 UIButton 有 IBOutlets,需要更好地组织

模式视图控制器后释放的 IBOutlets

单元测试初始化​​故事板

连接的 IBOutlets 未初始化

IBOutlets 和 IBActions 未显示在 main.storyboard 的视图控制器中