- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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
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/
我正在决定使用 MonoTouch 进行开发时哪些地方需要使用 .xib 文件。 我当前的项目需要与 iPhone 和 iPad 配合使用,所以我想知道使用 Interface Builder 是
我出于某个目的创建了 4 个宽度为 200、高度为 200 的 xib……但是如果我想在一个 xib 中加载所有 xib,我不知道如何实现……我有几个想法 1.能否让所有的xib都按组数组加载? 2.
我正在处理 Ipad 的应用程序。在这个应用程序中,我的第一类 Xib 上有一个 UIButton,现在我想在单击按钮时在第一类 XIB 中添加第二类 XIB。我知道如何调用第二类 XIB ..就是这
我的第二个 View Controller 中有标签。我想将按钮索引从 firstviewcontroller 传递到 secondviewcontroller 标签。当我按下按钮时,它转到第二个 V
描述:- 我正在为自定义框架编码,为此我到处都使用 XIB,现在我想在我现有的 XIB 中调用另一个 XIB,它的调用非常好但无法执行调用 XIB 的按钮操作。提前致谢 这是代码。 let bundl
我正在寻找一种方法来重用一个 .xib 文件中的内容并将其加载到多个其他 .xib 文件中。原因是我可以在我的应用程序的所有页面上重复使用我的部分设计。我知道在 android 编程中,您可以通过在设
我知道 View XIB 已经有一个 View ,但是还有其他差异吗?我读过的教程说创建一个 View XIB,更改类并删除 View ,然后插入一个 TableView 并重新建立连接(文件所有者到
首先,这是我的 View 层次结构: - Table view -- Table view cell (loaded from custom xib) --- Collection view ----
我想重新使用一些 .xib 文件作为我的 iOS 应用主要 View 的模板。有人能告诉我是否有可能在 iOS 中实现一个“类似模板”的系统,例如:Header、Logo、Footer,并将它们作为单
我如何设置一个 ViewController 来根据某些情况显示一个 View 或另一个 View ? 我有 ViewControllerA.xib 和 ViewControllerB.xib。两者都
有一些类似的帖子,但我已经搜索了很多答案,但不幸的是我没有找到。 我想要什么:我正在使用 xib 文件创建 View 。假设它的类是 BaseView。在这个 baseView 中,我有一个自定义 s
我有一个带有 xib 文件/类问题的奇怪的自动布局。我在使用 xib 文件的 Swift 中创建了一个自定义通知 View (UIView 子类)。 当设备以纵向加载时,通知很好。 当我旋转到横向时,
如果我在 ChildView.xib 中创建自定义 UIView - 我如何从 MainWindow.xib 中引用它? 我试图将一个 UIView 拖到 MainWindow.xib 并将其与同一个
我正在使用 IB 设计一个特定的按钮(带有一些标签、imageView 和其他东西)。 然后我想在另一个 xib 中使用那个 xib 对象(按钮),我有 6 个该按钮的对象。 我知道我可以使用类标识符
我在网上搜索了一段时间,但没有找到答案...... 升级到通用应用程序时,Xcode4 是否可以将 iPhone.xib 转换为 iPad.xib?!?在 Xcode 3 中,可以从选定的 iphon
我看过很多关于将 iPhone xib 转换为 iPad xib 的帖子和教程,但我想反其道而行之。 我能找到的唯一资源是: Convert iPad application to iPhone? 并
有什么方法可以使用相同的 xib 为 iPhone4 和 iPhone5 设计我的类吗? 最佳答案 是的,您可以使用相同的 XIB 通过使用自动布局为 iPhone 4 和 iPhone 5 进行设计
是否有键盘快捷键可以从当前的 xib 文件跳转到它的类(ViewController)?然后再次从它的类返回到它的 xib 文件? 我一直使用 ctrl-command-up/down 在标题和源代码
我对 this 有疑问项目,它没有 xib 文件或 Storyboard。该项目使用以下代码立即将 appdelegate 文件调用到主文件中: int retVal = UIApplicationM
我有一个正在运行的应用程序,其中包含一个导航 Controller 、两个 View Controller 、两个 View 、一个模型对象,并且没有 xib 文件。 View 是以编程方式创建的。现
Tôi là một lập trình viên xuất sắc, rất giỏi!