我正在使用 IB 设计一个特定的按钮(带有一些标签、imageView 和其他内容)。
然后,我想在另一个 xib 中使用该 xib 对象(即按钮),其中我有 6 个该按钮的对象。
我知道可以使用类标识符在编程时实现这一点,但那样我就必须在代码中定位我的标签和 imageView,并设置默认值和所有其他内容。
我想知道是否可能仅使用 IB 来做同样的事情?(当然,我仍将在代码中设置值,但我希望在 xib 中设置标签/imageView 的位置和所有其他内容)
谢谢
编辑
所以,我明白了我一开始要求的不可能实现。 现在我正在尝试这样做:
我创建了一个 ButtonTest.xib
。
在 Xib 中,我有一个 UIView 和 3 个子视图(2 个标签和一个按钮)。
在检查器中,我将 UIView 类设置为 ButtonTest
。
在 ButtonTest.m 中,我有每个子视图的 3 个 outlets,它们在 IB 中连接。
接下来我有一个 ButtonTestViewController.xib
。
在里面,我放置了一个视图,并将其类在检查器中设置为 ButtonTest
。
我将该视图连接到 ButtonTestViewController.m
中的一个名为 myTextView
的 outlet,该类为 ButtonTest
。
现在,这是 ButtonTestViewController.m viewDidLoad 中的代码:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"ButtonTest" owner:nil options:nil];
ButtonTest *mainView = (ButtonTest*)[subviewArray objectAtIndex:0];
self.myTextView = mainView;
}
我的期望是ButtonTestViewController.xib中的视图与我在ButtonTest.xib中设计的视图相同。但事实并非如此,ButtonTestViewController.xib内部的视图仍然保持不变。
值得一提的是,如果我添加:
[self.view addSubview:mainView];
它确实添加了新的视图,除了现有的视图。
有什么想法可以做到我想要的吗?
最终,我希望在 ButtonTestViewController.xib
中有 6 个视图,所有视图都看起来像 ButtonTest.xib 模板,并且标签值将在代码中设置。
Edit2
好的,伙计们,我按照你们说的做了,它完美地工作了。我目前唯一遇到的问题是当 ButtonTestViewController.xib
中的视图稍微大于 ButtonTest.xib
的视图时,按钮上的标签看起来非常模糊。当它们大小相同时,一切都很好。
@Ned - 我在我的 InitWithCoder 方法中使用了你发布的完全相同的代码,除了把 frame 语句换成了这个:
self.bounds = mainView.frame;
我尝试使用IB中的内容模式进行修复,但没有成功。
当我像您发布的那样使用它时,意思是:
mainView.frame = self.bounds;
我的代码完全不起作用了,两个视图大小都保持不变。 我尝试了resizeMask但仍无效。
有没有什么想法可以解决这两个问题? 谢谢大家!
编辑3
我成功解决了其中一个问题,将ButtonTestViewController.xib
的大小调整为ButtonTest.xib
的视图大小。
这是我所做的(使用代码解决模糊问题,引自这里)
self.bounds = CGRectMake(0, 0, mainView.frame.size.width, mainView.frame.size.height);
CGRect overlay2Frame = self.frame;
overlay2Frame.origin.x = round(overlay2Frame.origin.x);
overlay2Frame.origin.y = round(overlay2Frame.origin.y);
self.frame = overlay2Frame;
另一个问题我仍然无法解决。ButtonTest.xib中的视图就是无法变得更大以匹配其他视图。
initWithCoder
调用loadNibNamed
会创建无限循环,正如 @Johnus 上面所述。有什么办法可以摆脱它吗? - Tsiftis Karampouzouklis