【发布时间】:2015-05-15 18:13:18
【问题描述】:
我一直致力于自动化创建 UI 元素的某些方面,并创建了这种似乎有效的方法:
- (void) viewDidLoad
{
[super viewDidLoad];
button = [self createButton:button xPos:30 yPos:100 width:100 height:30 caption:@"autoButton" textPos:NSTextAlignmentCenter textClr:[UIColor blackColor] backClr:[UIColor yellowColor]];
[self.view addSubview: button];
}
- (UIButton *) createButton:(UIButton *)control xPos:(CGFloat)x yPos:(CGFloat)y width:(CGFloat)width height:(CGFloat)height caption:(NSString *)caption textPos:(NSTextAlignmentCenter)textPosition textClr:(UIColor *)textColor backClr:(UIColor *)backColor
{
control = [[UIButton alloc] initWithFrame: CGRectMake(x, y, width, height)];
[control setTitle:caption forState:UIControlStateNormal];
control.titleLabel.textAlignment = textPosition;
control.backgroundColor = backColor;
[control setTitleColor: textColor forState:UIControlStateNormal];
return control;
}
这个实现有什么问题/坏处吗?
不使用方法,是否可以仅使用普通的旧函数来实现相同的功能?必须指出参数名称有点啰嗦,xPos:30 yPos:100 width:100 height:100 等
如果能做这样的事情就好了:
button = createButton(30, 100, 100, 30, @"autoButton", NSTextAlignmentCenter, [UIColor blackColor], [UIColor yellowColor]);
这可行吗?
【问题讨论】:
-
您已经编写的方法不一定有问题,但是,根据您使用按钮的方式/位置,子类化 UIButton 并添加自定义初始化程序可能是一个更聪明的主意。我不会使用这样的函数,因为您不是用 C 编写的。我倾向于使用带有自定义初始化程序的子类,以使代码更具可移植性和模块化。
-
@Dare:那不是说所有那些自定义的子类 UI 类都必须单独导入吗?
-
是的,它们需要被导入,但 Objective-C 是一种面向对象的语言。一般来说,使用子类比用视图初始化器填充视图控制器更好。它会很好地工作,但如果你想在任何其他类甚至另一个项目中使用该方法,它就会变得更加困难。
-
@Dare:你是对的。谢谢。
标签: ios objective-c macos user-interface