2010-09-30 15 views
7

मेरे पास टैब बार एप्लिकेशन है। और टैब बार में से एक में मेरे पास एक नेविगेशन contorller है। मैं एक छवि के साथ UI बटन को नेविगेशन बार के दाएं बटन के रूप में सेट करने का प्रयास कर रहा हूं।UIButton UINavigationbar बटन

UIButton *refreshButton = [[UIButton alloc] init]; 
    [refreshButton setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal]; 
    [refreshButton addTarget:self action:@selector(refreshSection) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:refreshButton]; 
    //[rightButton setImage:[UIImage imageNamed:@"refresh_icon.png"]]; << DOESN'T WORK EITHER 
    self.navigationItem.rightBarButtonItem = rightButton; 
    [refreshButton release]; 
    [rightButton release]; 

लेकिन छवि दिखाई नहीं दे रही है। मुझे एक अदृश्य बटन मिलता है।

संपादित करें: मैं बटन शैली को सादा या पृष्ठभूमि पारदर्शी होना चाहता हूं, ताकि केवल छवि दिखाती हो। इसलिए मैं सीधे UIBarButton का उपयोग करने के बजाय UIButton का उपयोग कर रहा हूं।

उत्तर

22

आपको UIButton बनाने की आवश्यकता नहीं है और UIBarButtonItem में इसे कस्टम व्यू के रूप में उपयोग करने की आवश्यकता नहीं है। आप एक छवि के साथ सीधे एक UIBarButtonItem बना सकते हैं:

UIImage *myImage = [UIImage imageNamed:@"myImage.png"]; 
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:myImage style:UIBarButtonItemStyleBordered target:self action:@selector(refreshSection)]; 
self.navigationItem.rightBarButtonItem = button;  
[button release]; 

-

अपडेट किया गया, टिप्पणी के अनुसार

उपयोग UIBarButtonItem में कस्टम दृश्य के रूप में एक UIImageView:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]]; 
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:imageView]; 
self.navigationItem.rightBarButtonItem = rightButton; 
[imageView release]; 
[rightButton release]; 

-

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

-

अंतिम अद्यतन

मैं & चल प्रश्न में अपने प्रारंभिक कोड मिल गया है। छवि प्रदर्शित नहीं होने का कारण यह है कि आपने बटन के फ्रेम को सेट नहीं किया है। एक बार फ्रेम सेट करने के बाद, छवि नेविगेशन बार में दिखाया गया है।

UIImage *myImage = [UIImage imageNamed:@"paw.png"]; 
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setImage:myImage forState:UIControlStateNormal]; 
myButton.showsTouchWhenHighlighted = YES; 
myButton.frame = CGRectMake(0.0, 0.0, myImage.size.width, myImage.size.height); 

[myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside]; 

UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 
self.navigationItem.rightBarButtonItem = rightButton; 

[rightButton release]; 
[myButton release]; 

नोट::

यहाँ मेरी टुकड़ा मैं & परीक्षण किया इस्तेमाल किया है मैं करने के लिए नेत्रहीन UIButton की showsTouchWhenHighlighted संपत्ति की स्थापना की है बटन को हाइलाइट जब यह दबाया जाता है।

+0

बात यह है कि मैं बटन शैली को सादे या पृष्ठभूमि पारदर्शी होने के लिए चाहता हूं। UIBarButtonItemStyleBordered या कुछ भी छवि को एक बॉक्स में रखता है। Thats क्यों मैं एक यूबूटन – Rupert

+0

का उपयोग कर रहा था, आपको अपने प्रश्न में उल्लेख किया जाना चाहिए था। जैसा कि मैंने इंगित किया है, नेविगेशन बार में एक बटन जोड़ना हमेशा इसे सीमा के साथ प्रदर्शित करेगा, भले ही आप इसे सादे शैली में सेट करें। मुझे लगता है कि यह दस्तावेज में भी उल्लेख किया गया है। –

+0

अब यह छवि दिखाता है लेकिन जब मैं उस पर क्लिक करता हूं तो कुछ भी नहीं होता है।मैंने कोशिश की [दाएं बटन सेट लक्ष्य: स्वयं]; [दाएं बटन सेटएक्शन: @ चयनकर्ता (ताज़ा करें :)]; – Rupert

1

मैं इस

UIButton *refreshButton = [[UIButton alloc] initWithFrame:CGRectMake(292, 9, 27, 27)]; 
    [refreshButton setImage:[UIImage imageNamed:@"refresh_icon.png"] forState:UIControlStateNormal]; 
    [refreshButton addTarget:self action:@selector(refresh) forControlEvents:UIControlEventTouchUpInside]; 
    [self.navigationController.navigationBar addSubview:refreshButton]; 
    [refreshButton release]; 

अब यह ठीक काम करता है कर समाप्त हो गया है, लेकिन मैं वास्तव में यकीन है कि अगर यह यह करने का सही तरीका नहीं है नहीं कर रहा हूँ।

+0

हालांकि यह काम कर सकता है, मुझे लगता है कि यह 'UIBarButtonItem' का उपयोग करने के लिए क्लीनर है। –