gpt4 book ai didi

ios - 构建由其他 UIView 组成的 UIButton 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-28 22:36:09 25 4
gpt4 key购买 nike

我正在尝试创建自定义的 UIButton。它有一个(变化的)图像、一些信息文本,当然还有更标准的东西,比如标题等等。我正在使用界面构建器和 Storyboard来完成我应用程序中的大部分设计工作。

像这样构建自定义 UIButton 的最佳做法是什么?

我决定不进行子类化,而是直接接管绘图,因为按钮可以由更多标准元素构建。

相反,我尝试子类化 UIButton 并构建和添加 UIImageView、UILabel 等 subview 。除了一个异常(exception),这似乎工作得很好,我不确定什么时候放置所有东西,因为边界没有在 awakeFromNib 中设置并且 initWithFrame 从未被调用。最后,我添加了我的 UIViewController 在 vi​​ewDidAppear 中调用的另一个方法。

然后我意识到也许我可以在 UIViewController 的 viewDidLoad 或 viewDidAppear 中构建按钮而不进行子类化,但我再次注意到按钮上的边界尚不可用。

那么哪个最好:

  1. 子类化和绘制一切
  2. 通过组合其他 UIView 进行子类化和构建
  3. 在外部 View 中构建按钮
  4. 其他方法...?

此外,当 parent 使用自动布局时,框架中的所有内容似乎都反对手动布局 subview ,所以我认为必须有更好的方法。

最佳答案

创建一个单独的 UIView 类并将所有按钮放入其中。
然后将该 View 子类化为您的 View Controller 。

喜欢:

1) 使用您的按钮创建一个 View 并将该 View 作为类名提供给您的自定义 .xib 和 View 。

即我正在使用名为“MultipleChoiceLayout”的按钮创建一个自定义 View
- MultipleChoiceLayout.h
- MultipleChoiceLayout.m
- MultipleChoiceLayout.xib

我将 MultipleChoiceLayout 定义为文件的所有者以及自定义 View 。
enter image description here

2) 将此自定义 View 添加到您的父 View

    NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"MultiChoiceLayout" owner:self options:nil];

MultiChoiceLayout *multipleChoiceLayout = [[MultipleChoiceLayout alloc] initWithArray:array];

[ParentView addSubview:multipleChoiceLayout];

看看我是如何在父 View 中初始化自定义 View 的。

我将数组传递给“MultipleChoiceLayout”类,并在 multichoicelayout 类中定义了 self 。

-(id)initWithArray:(NSArray*)array
{
self = [array objectAtIndex:0];
if(self) {

}
return self;
}
  • 现在发生的事情是您通过从父级传递自定义 View 对象来将您的自定义 View 对象从父级传递到您的自定义 View (参见上面的代码片段)。现在,无论何时单击按钮,它都会自动调用您在自定义 View 中定义的方法。您无需维护任何东西

希望这会有所帮助。

关于ios - 构建由其他 UIView 组成的 UIButton 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15940564/

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