0

背景ビューの各ラベルに影を付けようとしています。

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];

問題は、私の背景ビューに、セルのラベルがこのshadowColorを取得してはならないいくつかのサブビュー(たとえば、テーブルビュー)があることです。

私はそうすることによってこれを試しました:

[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
[[UILabel appearanceWhenContainedIn:[MyBackgroundView class], nil] setShadowOffset:CGSizeMake(0, -1)];
[[UILabel appearanceWhenContainedIn:[UITableViewCell class], nil] setShadowColor:[UIColor clearColor]];

ただし、テキストシャドウはテーブルビューのセルにまだ存在します。

誰かが私が間違っていることを教えてもらえますか?!?

4

3 に答える 3

2

UIAppearanceプロキシを使用してUILabelをカスタマイズすることはできません。この質問を参照してください。私の経験では、そうしようとすると、一貫性のない混乱した結果につながります。

appearanceWhenContainedIn:[somethingElse]UILabelを設定すると、他のすべての[UILabel appearance]呼び出しが無視されるという問題も発生しました)

于 2012-08-07T04:19:51.380 に答える
1

UILabelのサブクラスを作成し、その上にシャドウの外観を設定します。

于 2012-02-16T12:05:45.643 に答える
-2

2つの選択肢があると思います。

  1. その変更されたコントロールを独自のコンテナに入れて使用することができます。

    @implementation ChildViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowColor:[UIColor colorWithWhite:0.6 alpha:1]];
        [[UILabel appearanceWhenContainedIn:self.class, nil] setShadowOffset:CGSizeMake(5.0, 5.0)];
    }
    
    @end
    

    変更は、ChildViewControllerコンテナ内でホストされているUILabelインスタンスにのみ適用されます

  2. または、提案されているようにUILabelをサブクラス化して、現在のコンテナー内の外観の変更を連鎖させないようにすることもできます(したがって、セル内の他のラベルは影響を受けません)。

于 2012-03-05T10:08:10.980 に答える