【问题标题】:How to use a xib and a UIView subclass together?如何一起使用 xib 和 UIView 子类?
【发布时间】:2011-05-03 13:44:32
【问题描述】:

我想创建几个自定义视图,一种可重用的 UI 组件,并且不希望在 UIView 子类中的代码中布局 UI。我想为此使用xib。我自己用过xib。而且我自己使用了 UIView 子类。但我没有一起使用它们。我如何将它们“连接”到彼此?我想使用 IBOutlets 在我的自定义视图中访问 UILabel。

这种东西会起作用吗?

NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil]; 
MyCustomView *view = [xib objectAtIndex:0];
view.myLabel.text = @"fred";

【问题讨论】:

标签: iphone objective-c cocoa-touch ios interface-builder


【解决方案1】:

是的,当您将非父级 xib 加载到 viewControllers 时,这就是它的工作方式

2013 年 8 月 15 日编辑:

你不能总是假设你会从返回的 NSArray 的索引 0 中得到你正在寻找的东西,这就是使用类型检查的好处。

NSArray *xibArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:nil options:nil];
MyCustomView *myView = nil;
for (id xibObject in xibArray) {
//Loop through array, check for the object we're interested in.
    if ([xibObject isKindOfClass:[MyCustomView class]]) {
        //Use casting to cast (id) to (MyCustomView *)
        myView = (MyCustomView *)xibObject;
    }
}

【讨论】:

  • 我确实让它按照我想要的方式工作。我创建了 UIView 子类,为我拥有的两个 UILabel 添加了 IBOutlets。在 Interface Builder 中,我将视图类更改为 UIView 子类,并将两个标签上的引用出口设置为视图。
  • 我正在尝试做同样的事情 - 你知道我应该为 (a) 父 UIControllerView 和 (b) 自定义 UIView 本身使用什么类名吗?我已经在我的代码中注意到我在两者中都有我的自定义 UIView 类名,但这给了我对我的自定义 UIView init 方法的递归调用。那就是我(a)在使用我的自定义视图的父 UIControllerView 中,在 IB 中因为它是 XIB 我使用 UIView,我已将类名设置为“clockview”,但随后(b)在我的实际时钟视图自定义 UIView (不是 UIControllerView)XIB 文件我做了同样的事情并将类名设置为“clockview”。
  • 我不明白你的意思。在 Interface Builder 中制作 UI 布局,连接一些 IBOutlets 比手动设置 CGRect 框架更耗时
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多