0

.

やあ、

コードの行数が増えて乱雑になっているため、viewDidLoad メソッドをクリーンアップしたいと考えています。

現在、私の UI はプログラムで構築されています。その方法を学びたいからです。

だから私は別の -9void) メソッドで UI 項目を設定し、それを使用してその void にリンクできることをこのSO Postで読みました[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 Controllerを指し、view はそのView Controllerが所有するビューを指します。したがって、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];
}

次に、View Controller に属するビューを実際に変更すると、変更が実際に表示されます。


また、この関数はあまり役に立たないことをお勧めします。変更されることのない 1 行のコードをカプセル化する関数を作成しています。そのための関数を作成する意味はあまりありません。より便利な実装は次のとおりです。

-(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

2番目のインスタンスの方法は、作成されてからリークされるbackgroundColor別のオブジェクトに背景色を設定するだけです。UIView(メソッド名も良くありません。プロパティ ゲッターを示唆していますが、実際にはプロパティを取得したり何も返したりしません。)

于 2012-05-25T01:03:38.217 に答える
0

ここでの問題は、backgroundColour メソッドが使用される前に宣言されていないことです。したがって、これを回避するには3つの方法があります

  1. backgroundColor メソッドを viewDidLoad の上に移動します
  2. @interface で public メソッドとして backgroundColour を宣言します。
  3. プライベート インターフェイスを作成し、backgroundColour を宣言する

No.3 例:

@interace MyViewController (プライベート) - (void)backgroundColor; @終わり

インターフェイスが何かから継承されている場合でも、上記のようにプライベート インターフェイスを記述します。

また、実行するだけで新しいビューを作成しないでください[self.view setBackgroundColor:[UIColor redColor]];

于 2012-05-25T01:05:59.543 に答える