sách gpt4 ăn đã đi

iphone - 在另一个 xib 中使用 xib 对象

In lại 作者:太空狗 更新时间:2023-10-30 03:14:58 26 4
mua khóa gpt4 giày nike

我正在使用 IB 设计一个特定的按钮(带有一些标签、imageView 和其他东西)。

然后我想在另一个 xib 中使用那个 xib 对象(按钮),我有 6 个该按钮的对象。

我知道我可以使用类标识符以编程方式执行此操作,但随后我必须定位我的标签和 ImageView ,并设置默认值和代码中的所有其他内容。

我想知道仅使用 IB 是否可以做同样的事情? (当然我仍然会在代码中设置值,但我想在 lables/imageView 的位置和所有其他设置在 xib 中)

Cảm ơn

biên tập

所以,我明白我一开始要求的是不可能的。我现在正在尝试的是这样的:

我创建了一个 ButtonTest.xib。在 Xib 内部,我有一个 UIView 和 3 个 subview (2 个标签和一个按钮)。在检查器中,我将 UIView 类设置为 ButtonTest。在 ButtonTest.m 中,每个 subview 都有 3 个导出,我在 IB 中连接它们。

接下来我有一个 ButtonTestViewController.xib。在其中我放置了一个 View 并将其在检查器中的类设置为 ButtonTest。我将该 View 连接到 ButtonTestViewController.m loại ButtonTest

nội bộ myTextView ổ cắm

现在,这是 ButtonTestViewController.m viewDidLoad 中的代码:

- (void)viewDidLoad {
[siêu viewDidLoad];

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"ButtonTest" owner:nil options:nil];
ButtonTest *mainView = (ButtonTest*)[subviewArray objectAtIndex:0];

self.myTextView = mainView;
}

我希望发生的是 ButtonTestViewController.xib 中的 View 将成为我在 ButtonTest.xib 中设计的 View 。这只是没有发生。 ButtonTestViewController.xib 中的 View 保持不变。

值得一提的是,如果我添加:

[self.view addSubview:mainView];

除了现有 View 之外,它确实添加了新 View 。

知道如何做我想做的事吗?

最终我想在 ButtonTestViewController.xib 中有 6 个 View ,所有 View 看起来都像 ButtonTest.xib 模板,标签值将在代码中设置。

编辑2

好的,伙计们,我按照您说的做了,效果非常好。我现在遇到的唯一问题是 ButtonTestViewController.xib 中的 View 比 ButtonTest.xib 中的 View 大一点。发生这种情况时,按钮上的标签看起来非常模糊。当它们大小相同时,一切都很好。

@ Ned - 我使用了你在我的 InitWithCoder 方法中发布的确切代码,只是我将框架语句切换为:

self.bounds = mainView.frame;

我尝试在 IB 中使用内容模式尝试修复它,但无济于事。

当我像你发布的那样使用它时,意思是:

mainView.frame = self.bounds;

它根本不起作用,两个 View 的大小保持不变。在这里,我尝试使用 resizeMask,但仍然没有用。

如何解决这两个问题?谢谢大家!

编辑3

我设法解决了其中一个问题,将 ButtonTestViewController.xib 调整为 ButtonTest.xib View 大小。这就是我所做的(使用代码解决模糊问题,取自 đây )

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 中的 View 不会变大以匹配其他 View 。

câu trả lời hay nhất

您可以做到这一点,而且非常容易。我这样做的方法是创建一个 UIView 子类(假设它称为“MyView.m”和“MyView.h”),然后创建一个名为“MyView.xib”的 Nib 。

首先,在 nib 中,单击 File's Owner,然后将类设置为“MyView”。这将使您类(class)的 IBOutlets/Actions 出现在 IB 中。添加一个顶级 View (如果它还没有)作为您的主视图,并添加您的其他自定义元素(UILabels 和 UIImageViews)作为主 UIView 的 subview 。

接下来,添加以下代码,以便在初始化 MyView 时调用它(请记住,如果您从 nib 进行初始化,它将通过 - (id)initWithCoder:(NSCoder *)aDecoder 进行初始化)。

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];

//Just in case the size is different (you may or may not want this)
mainView.frame = self.bounds;

[self addSubview:mainView];

这样做是将 View 层次结构从您的 nib 加载到 NSArray 中,并且由于您只有一个顶级 UIView,因此您只需将其添加为自定义 UIView 的 subview 即可。

这允许您在 Interface Builder 中设计 UIView(和 UIView 的其他子类)。

编辑:更新为 OP 的编辑。

我一直这样做的方法是首先按照我上面的说明进行操作。一个区别是,在您的 ButtonTest Nib 中,您将 UIView 的类更改为 ButtonTest,但我将文件所有者的类更改为 ButtonTest。然后,在 ButtonTest.m 中,执行 loadNibNamed 操作。现在,要将该对象添加到 ButtonTestViewController.xib,请添加一个 UIView(或 UIButton,无论 ButtonTest 的子类是什么)并将类更改为 ButtonTest。

这有点令人困惑,所以我将尝试按文件将其分解。

ButtonTestViewController.xib:添加一个 UIButton(无论 ButtonTest 继承自什么)并将类更改为 ButtonTest

ButtonTest.m:在“initWithCoder”方法中,执行上面所有的“loadNibNamed”操作

ButtonTest.xib:将 File 的 Owner 类更改为 ButtonTest 并链接所有 IBOutlets 和 IBActions

关于iphone - 在另一个 xib 中使用 xib 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095359/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress