从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

Posted

技术标签:

【中文标题】从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图【英文标题】:loading custom slider from NIB vs from code: no subviews present when loaded from code 【发布时间】:2011-04-01 15:36:03 【问题描述】:

我正在尝试创建自定义 UISlider。我需要将子视图(如标签)插入自我。我正在使用

[self insertSubview:_label1 atIndex:2];

这样做的方法。当我在 IB 中创建滑块并将我的 PWSlider 类分配给它时,一切正常。

但是,如果我尝试从代码创建 PWSlider,则在我执行初始化(添加我的子视图)时不存在子视图。

对于代码中的 init,我覆盖 initWithFrame,对于 NIB 情况,我尝试了 awakeFromNib 和 initWithCoder - 结果相同。

当我使用

进行调试时
NSLog(@"subview count: %d", [self.subviews count]);

结果是从 NIB 加载我得到 3 个子视图,以编程方式加载我得到 0 个。

有什么想法吗?

【问题讨论】:

这是我自己实现的自定义 UISlider... ;-) 【参考方案1】:

我假设您的 PWSlider 是从 UISlider 继承的,并且还假设您的代码类似于:

-(id)initWithFrame:(CGRect)r 
  self = [super initWithFrame:r];
  if(self) 
    // add your subviews here, starting from index 0
  
  return self;

您是否调试并检查过您的 initWithFrame 是否被调用?

另外,如果您不关心子视图的位置,请使用 addSubview 而不是 insertSubview:atIndex:。

【讨论】:

是的,您的假设是正确的。 initWithFrame 被调用,我关心插入子视图的位置......目前我只使用 NIB 文件中的滑块。谢谢你的建议!其他想法?

以上是关于从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图的主要内容,如果未能解决你的问题,请参考以下文章

从 NIB 加载的自定义视图始终旋转 90 度

从 NIB 加载自定义 UITableViewCell 问题

从 nib 加载自定义 UIView 会导致无限循环或抛出 nil 异常

如何获取从 nib ios 加载的自定义视图的实际大小

将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController

Swift 从 Nib 创建自定义视图