ios - 想要清理我的viewDidLoad方法

时间:2012-05-25 00:58:08

标签: ios uicolor viewdidload

您好,

我想要清理我的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];
}

我误解了这个吗?

提前致谢: - )

3 个答案:

答案 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种方法可以解决这个问题

  1. 将backgroundColor方法移到viewDidLoad
  2. 上方
  3. 将backgroundColour声明为@interface
  4. 中的公共方法
  5. 创建私人界面并声明backgroundColour
  6. No.3示例:

    @interace MyViewController(私有) - (void)backgroundColor; @end

    请注意,如果您的接口继承了任何内容仍然如上所述编写私有接口。

    另外,请不要创建新视图,只需执行[self.view setBackgroundColor:[UIColor redColor]];