2012-04-30 5 views
0

タイトルバーの色合いを設定し、すべてのビューの背景画像を設定しましたが、私の人生は設定方法を理解できませんセクションヘッダーなどのデフォルトのUILabelの色。私はすべての色をUIColor.Blackに手作業で設定してコードを謎めいていません。さまざまなUIElementsのリストを取得する方法はありますか?それぞれのデフォルト(色、フォント、サイズ)を設定する方法はありますか?私は特にラベルの色に興味がありますが、その他の情報は将来にとって非常に役立ちます。Monotouchでアプリケーション全体のデフォルトのUILabelの色を設定します

+0

あなたは 'UILabel'をサブクラス化し、そこにあなたの"デフォルト "ラベルを設定する作業をすることができますか?この方法で、コード全体(またはXIBファイル)でサブクラスを使用するだけです。 – jonathanpeppers

+0

Monotouch.Dialogを使用しているので、アセンブリビューからソースをコピーして自分のクラスを作成しない限り、これらの要素を制御する方法はありません。 1つの場所でラベルの色を変更する方法が見つからない場合は、このルートを検討しています。 –

+0

詳しくは、私自身のDDRootElement、DDSectionなどを使って、これらのラベルを自分が選んだ色に設定します。 –

答えて

0

これはちょっとハッキリですが、これはトリックですが、サブクラスUIViewのすべての種類のUIコントロールで動作します。これはあなた自身がサブクラス化されたDialogViewControllerを持っていることを前提としています(私の中には便利な時間がたくさんあり、私のすべてのビューは仕事をするために私のDVCをサブクラス化しています)。

protected void ForAllSubviewUIControlsOfType<TUIType>(Action<TUIType, int> actionToPerform) where TUIType : UIView 
    { 
     processSubviewUIControlsOfType<TUIType>(this.View.Subviews, actionToPerform, 0); 
    } 

    private void processSubviewUIControlsOfType<TUIType>(UIView[] views, Action<TUIType, int> actionToPerform, int depth) where TUIType : UIView 
    { 
     if (views == null) 
      return; 
     if (actionToPerform == null) 
      return; 
     foreach (UIView view in views) 
     { 
      if (view.GetType() == typeof(TUIType)) 
      { 
       actionToPerform((TUIType)view, depth); 
      } 
      if (view.Subviews != null) 
      { 
       foreach (UIView subview in view.Subviews) 
       { 
        processSubviewUIControlsOfType<TUIType>(view.Subviews, actionToPerform, depth + 1); 
       } 
      } 
     } 
    } 

元の問題を解決し、セクション内にあるすべてのラベルのテキストの色を変更するには、これはあなたが何をする必要があるかです:

public override void ViewDidAppear (bool animated) 
    { 
     base.ViewDidAppear (animated); 
     ForAllSubviewUIControlsOfType<UILabel>((label, depth) => { 
      if (/*label.Superview is UIView && label.Superview.Superview is UITableView*/ depth == 1) 
      { 
       label.TextColor = UIColor.Black; 
      } 
     }); 
    } 

コメントアウト部分があれば決定されたものです私がint depthのカウントを返して、それがビュー上にあるかどうかを確認する前に、セクション内にラベルが存在していました。

EDIT:これは完璧な解決策ではないかのように思われます。深さのカウントはこれらの要素によって異なります。私は次の日か2日に何か良いものを見つけなければならないでしょう。

1

iOS 5からは、多くのUI要素のグローバルな外観を処理するためのUIAppearanceクラスがあります。

MonoTouchで動作する方法は、Appearanceという内部タイプがこれらのタイプに存在することです。プロパティを直接設定することもできます(MonoDevelopのコード補完が簡単です)。例えば。

UILabel.Appearance.BackgroundColor = UIColor.Blue; 

悲しいことに、あなたが望むかもしれないすべてのコントロール(iOS 5以前では動作しません)をカバーしていません。

+0

悲しいことに、フォアグラウンドカラーではなく背景色のみを変更することができます。しかし、私はちょっと投稿する回避策を見つけました。 –

関連する問題