2012-02-28 19 views
1

外観属性を使用してナビゲーションバーの色を変更するコードがあります。 navbarの色の変更をすぐに表示したいと思います。しかし、私はnavbarを再描画するための適切な呼び出しを見つけることができません。現在、モーダルナビゲーションコントローラを押すと色が変わり、ナビゲーションバーを覆います。iPhone iOSの要求に応じてUINavigationBarを再描画する方法は?

これは動作しません:

AppDelegate* appDelegate = ((AppDelegate*)[[UIApplication sharedApplication] delegate]); 

    [appDelegate.window setNeedsDisplay]; 

私もうまくいきませんでした自分の意見を、再描画するには、ナビゲーションコントローラの様々なインスタンスを尋ねてみました。

UINavigationBarにオンデマンドで再描画を依頼する正しい方法は何ですか?

ありがとうございました!

更新:ここでは動作するコードです!

- (UIColor *) colorOfPoint:(CGPoint)point 
    { 
     unsigned char pixel[4] = {0}; 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
     CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast); 

     CGContextTranslateCTM(context, -point.x, -point.y); 

     [self.view.layer renderInContext:context]; 

     CGContextRelease(context); 
     CGColorSpaceRelease(colorSpace); 

     NSLog(@"pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]); 
     float red = pixel[0]/255.0; 
     float green = pixel[1]/255.0; 
     float blue = pixel[2]/255.0; 
     float alpha = pixel[3]/255.0; 
     UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; 

     [[NSUserDefaults standardUserDefaults] setFloat:red forKey:@"navBarRed"]; 
     [[NSUserDefaults standardUserDefaults] setFloat:green forKey:@"navBarGreen"]; 
     [[NSUserDefaults standardUserDefaults] setFloat:blue forKey:@"navBarBlue"];  
     [[NSUserDefaults standardUserDefaults] setFloat:alpha forKey:@"navBarAlpha"]; 



     return color; 
    } 





    - (IBAction)handleTapFrom:(id)sender { 

     if([sender isKindOfClass:[UITapGestureRecognizer class]]) 
     { 


      CGPoint location = [tapGestureRecognizer locationInView:self.view]; 

      //remember color preferences 
     UIColor* navbarColor = [self colorOfPoint:location]; 
      selectColorView.center = location; 

      //UPDATE THE NAVBAR COLOR CODE HERE 

    //this does not update immediately 
     float navBarRed = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarRed"]; 
     float navBarGreen = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarGreen"];  
     float navBarBlue = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarBlue"]; 
     float navBarAlpha = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarAlpha"]; 

     UIColor* navBarColor = [UIColor colorWithRed:navBarRed green:navBarGreen blue:navBarBlue alpha:navBarAlpha]; 


//set the color of all newly created navbars 
     [[UINavigationBar appearance] setTintColor:navBarColor]; 
     [[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent]; 
     [[UINavigationBar appearance] setAlpha:0.7]; 


     //update the toolbar appearance 
     [[UIToolbar appearance] setTintColor:navBarColor]; 

//set the color of the current navbar, displaying immediate change 
self.navigationController.navigationBar.tintColor = navbarColor; 



     } 



    } 
+1

'[myNavigationController.navigationBar setNeedsDisplay]'を試したことがありますか? –

+0

ナビゲーションバーを再描画したいときは? –

+1

これは正しいナビゲーションコントローラですか、またはプッシュされたコントローラのナビゲーションバーが設定されていますか?より関連性の高いナビゲーションバーの色を設定する場所にコードを投稿できますか? – JoePasq

答えて

16

は、あなただけのNavigationBartintColorを設定することができませんか?それは動作するはずです:

self.navigationController.navigationBar.tintColor = [UIColor redColor]; 
関連する問題