2010-02-14 14 views
11

संभव डुप्लिकेट:
How to add background image on iphone Navigation bar?iPhone - NavigationBar कस्टम पृष्ठभूमि

मैं एक तरह से एक कस्टम नेविगेशन बार है और इस लक्ष्य को हासिल करने के लिए कस्टम नेविगेशन पट्टी पृष्ठभूमि की आवश्यकता है के लिए देख रहा हूँ । मैं यह कैसे करना चाहता था इसके लिए चारों ओर देख रहा था, लेकिन समाधान नहीं मिला। अगर किसी के पास समाधान है, तो मदद की बहुत सराहना की जाती है।

+0

अधिक समाधान विकल्प यहाँ समाधान: http://stackoverflow.com/questions/1692487/how-to-add-background-image-on-iphone-navigation-bar जोड़ने के लिए –

उत्तर

6

आप केवल एक सबविव (एक UIImageView) को navaigationBar में जोड़ सकते हैं, जो कि केवल एक UIView सबक्लास है।

UINavigationBar nb = [[UINavigationBar alloc]init]; 
[nb addSubview: foo]; 
[nb release]; 

यहाँ एक मंच पोस्ट का वर्णन करता है कि कैसे एक वर्ग में इस लपेट के लिए है: http://discussions.apple.com/thread.jspa?threadID=1649012&tstart=0

10

जुड़ा हुआ Apple.com पोस्ट 3 या 4 विभिन्न समाधान भी शामिल है (एंड्रयू जॉनसन की प्रतिक्रिया के लिए पूरक) , जिनमें से अधिकांश केवल "आधे" काम करते हैं। मुझे लगता है कि सबसे सुंदर/उनमें से प्रभावी इस एक है:

@implementation UINavigationBar (CustomImage) 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"NavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 

हालांकि ... यह अच्छा अभ्यास ObjC ओवर ड्राफ्ट करने के लिए है कि एक वर्ग के रूप में (एक ओवरराइड होना चाहिए) नहीं है, और इसके बारे में कुछ समस्या है इसके खुद।

तो, एक अधिक सामान्य और शक्तिशाली समाधान यहाँ है:

http://samsoff.es/posts/customize-uikit-with-method-swizzling

+0

धन्यवाद मेरे लिए एडम :) आप सही हैं कि श्रेणियों के साथ ओवरराइडिंग विधियां एक बहुत ही खराब प्रथा है। –

+0

किसी ने स्पष्टीकरण के बिना इसे कम किया? यकीन नहीं है कि क्यों। हालांकि मैं जोड़ूंगा: यह पूरा प्रश्न (और अधिकांश उत्तरों) केवल आईओएस 2/3/4 हैं - आईओएस 5 में ऐसा करने की पूरी नई प्रणाली है। उत्तर अभी भी उन लोगों के लिए काम करता है जो आईओएस 4 कर रहे हैं। – Adam

14

iOS5 के बाद से, आप आसानी से एक कस्टम पृष्ठभूमि के साथ विधि setBackgroundImage सेट कर सकते हैं,: forBarMetrics: लेकिन आप अगर जांच करना चाहिए उपयोगकर्ता के फोन का सही ओएस है।

if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) 
{ 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"texture.png"] 
                forBarMetrics:UIBarMetricsDefault]; 
} 

यह एक अच्छा समाधान है, क्योंकि यह दस्तावेज़ में है।

+0

जब तक कोई उपयोगकर्ता आईओएस 5 नहीं चला रहा है तब तक आपका ऐप – JoeCortopassi

+3

चलाता है, लेकिन इसके लिए एक चेक है। आप किसी और खंड में कुछ और कर सकते हैं। – Martin

3

इसे डीडलोड में देखें। यह आईओएस 5 की जांच करेगा और पसंदीदा विधि का उपयोग करेगा, अन्यथा यह आईओएस संस्करण < 5.0 के लिए एनवीबार में एक सबव्यूव जोड़ देगा। यह काम करेगा कि आपकी कस्टम पृष्ठभूमि छवि में कोई पारदर्शिता नहीं है।

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
NSLog(@"%f",version); 
UIImage *backgroundImage = [UIImage imageNamed:@"myBackgroundImage.png"]; 
if (version >= 5.0) { 
    [self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 
} 
else 
{ 
    [self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:backgroundImage] autorelease] atIndex:1]; 
} 
संबंधित मुद्दे