0

.

你好,

我想清理我的 viewDidLoad 方法,因为它的代码行数越来越多,而且越来越混乱。

现在我的 UI 是以编程方式构建的,因为我想学习这种做事方式。

所以我在这个SO Post上读到,我可以在单独的 -9void) 方法中设置 UI 项,然后使用链接到该 void[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];
}

这是我误会了吗??

提前致谢:-)

4

3 回答 3

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 ,将背景颜色更改为不同的值。

于 2012-05-25T01:03:59.090 回答
0

backgroundColor在第二个实例中的方法只是在UIView创建然后泄漏的某些不同对象上设置背景颜色。(方法名称也不是很好——它暗示了一个属性获取器,但实际上并没有获取属性或返回任何东西。)

于 2012-05-25T01:03:38.217 回答
0

这里的问题是您的方法 backgroundColour 在使用之前未声明。所以有3种方法可以解决这个问题

  1. 将您的 backgroundColor 方法移到 viewDidLoad 上方
  2. 在@interface 中将 backgroundColour 声明为公共方法
  3. 创建一个私有接口并声明 backgroundColour

No.3 示例:

@interace MyViewController (private) - (void)backgroundColor; @结尾

请注意,如果您的接口是从任何东西继承的,仍然像上面那样编写私有接口。

也不要创建一个新的视图只是执行[self.view setBackgroundColor:[UIColor redColor]];

于 2012-05-25T01:05:59.543 回答