您好,
我想要清理我的viewDidLoad方法,因为它的代码行数越来越多,而且它变得越来越混乱。
现在我的UI是以编程方式构建的,因为我想学习这种做法。
所以我读了这个SO Post,我可以在一个单独的-9void方法中设置UI项目,然后使用[self method]
现在,当我使用这种方式时,它似乎对我不起作用。
喜欢,如果我想设置背景颜色,这将起作用:
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithRed:0.0 green:0.2 blue:0.38 alpha:1.0];
}
但这不是:
- (void)viewDidLoad
{
[super viewDidLoad];
[self backgroundColor];
// Do any additional setup after loading the view.
}
-(void)backgroundColor
{
UIView *backgroundView = [[UIView alloc] init];
backgroundView.backgroundColor = [UIColor colorWithRed:0.0 green:0.2 blue:0.38 alpha:1.0];
}
我误解了这个吗?
提前致谢: - )
答案 0 :(得分:2)
我认为你误解了视图/视图控制器的本质。
在这一行:
self.view.backgroundColor = [UIColor colorWithRed:0.0 green:0.2 blue:0.38 alpha:1.0];
self指向要加载的视图控制器,而view指的是该视图控制器拥有的视图。因此,当您设置self.view.backgroundColor时,您将为要显示的视图控制器显示的视图设置背景颜色。因此有效。
另一方面,你的另一种方法不这样做:
UIView *backgroundView = [[UIView alloc] init];
该行创建一个全新的UIView实例,并设置其背景颜色。这是一个全新的视图,与self.view之前引用的视图不同。
如果您真的想拥有一个可以改变背景颜色的独立功能,请按以下方式编写:
-(void) setBackgroundColor
{
self.view.backgroundColor = [UIColor colorWithRed:0.0 green:0.2 blue:0.38 alpha:1.0];
}
然后,您实际上正在修改属于视图控制器的视图,并且实际应该显示更改。
我还建议这个功能不是很有用;你正在创建一个封装一行永不改变的代码的函数。为此制作功能真的没什么意义。更有用的实现可能是:
-(void) setBackgroundColor:(UIColor)newColor
{
self.view.backgroundColor = newColor;
}
要使用此方法,您需要在viewDidLoad方法中编写以下行:
[self setBackgroundColor:[UIColor colorWithRed:0.0 green:0.2 blue:0.38 alpha:1.0]];
然后你可以随时再次调用setBackgroundColor,将背景颜色更改为不同的值。
答案 1 :(得分:0)
第二个实例中的backgroundColor
方法只是在创建然后泄露的某个不同UIView
对象上设置背景颜色。 (方法名称也不是很好 - 它建议使用属性getter,但实际上并没有获取属性或返回任何内容。)
答案 2 :(得分:0)
这里的问题是你的方法backgroundColour在使用之前没有被声明。所以有3种方法可以解决这个问题
No.3示例:
@interace MyViewController(私有) - (void)backgroundColor; @end
请注意,如果您的接口继承了任何内容仍然如上所述编写私有接口。
另外,请不要创建新视图,只需执行[self.view setBackgroundColor:[UIColor redColor]];