gpt4 book ai didi

iphone - 与 XIB 相比,基于代码的 UIView 的重用

转载 作者:行者123 更新时间:2023-12-03 19:15:53 25 4
gpt4 key购买 nike

假设我有一个 UIView,我想在多个 View Controller 中重用它,因为它是一个相当通用的 UIView 对象,具有很高的可重用性值(value)(如 UITextFieldUISegmentedControl对象)。根据我的理解,如果我用代码编写 UIView,而不是使用 Interface Builder 制作 XIB,那么重用此 UIView 会容易得多。我得出这个结论是因为如果 UIView 是用代码编写的,那么我可以简单地在任何 View Controller 中初始化该 UIView 的新实例:

MyGreatReusableView *greatReusableView = [[MyGreatReusableView alloc] initWithFrame:CGRectMake(...)];

...然后直接访问该 UIView 的属性和属性,就像使用普通 UIView 控件(例如 UITextField 及其 .text .textColor等属性。

但是,如果我将 UIView 创建为 XIB,那么它必须(通过文件所有者或 XIB 中 View 对象上的 IBOutlet)绑定(bind)到特定 View Controller ,因此只能在该 View 中使用 Controller 。此外,我只能使用连接到该 View Controller 的 IBOutlet 访问 XIB 上控件的属性。

我认为我完全误解了有关 XIB 文件的某些内容,因为这似乎确实是一个相当大的限制!如果有人可以澄清是否可以在多个 View Controller 中重用 XIB 文件,如果可以,请提供基于代码的解决方案与基于 XIB 的解决方案的示例,我将非常感激。

预先感谢您的帮助!

最佳答案

无需设置可重用 View 的 IBOutlet 的替代解决方案是为要使用的 subview 分配特定标记。然后就可以获取带有标签的 View 了。

例如,当您想要创建带有标签和文本字段的 View 时。执行此操作的过程是:

  1. 创建一个空的 xib
  2. 将带有标签和文本字段的 View 设置为 subview 。
  3. 为标签和文本字段分配不同的标签(假设为 10 和 11)

  4. 为此 xib 创建头文件并为标签定义宏
    #define kReusableViewNibName @"ReusableViewNibName"
    #define kLabelTag 10
    #define kTextFieldTag 11

  5. 您现在可以在任何您想要的 View Controller 中加载 xib:


// Import header file with previous defines

NSArray *rootViewsFromXib = [[NSBundle mainBundle] loadNibNamed:@"NameOfXib"
owner:nil
options:nil];

// There is only one root view in the xib,
// the view that contains the label and text field
UIView *loadedView = [rootViewsFromXib objectAtIndex:0];

// You can now use the views from within the xib
// by using the tags to obtain the views.
UILabel *label = (UILabel *)[loadedView viewWithTag:kLabelTag];
UITextField *textField = (UITextField *)[loadedView viewWithTag:kTextFieldTag];

关于iphone - 与 XIB 相比,基于代码的 UIView 的重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4906435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com