2009-08-02 11 views
12

मैं कस्टम छवियों का उपयोग कर 5 बटन के साथ UIToolbar बनाने की कोशिश कर रहा हूं। जिस तरह से मैं यह कर रहा हूं वह UIButtonTypeCustom के बटन बनाकर, फिर UIBarButtonItems बनाकर इन्हें setItems:animated: के साथ टूलबार में जोड़ रहा है। हालांकि, यह उन छवियों के बीच रिक्त स्थान जोड़ता है जो 5 वीं छवि को टूलबार के दाहिने तरफ से आधे भाग तक समाप्त कर देते हैं। मैं इन रिक्त स्थान से कैसे छुटकारा पा सकता हूं? मैंने जो कुछ भी सोच सकता हूं उसकी कोशिश की है।कस्टम दृश्यों के बीच मैं UIToolbar में रिक्त स्थान कैसे हटा सकता हूं?

सहायता की बहुत सराहना की जाती है।

यहाँ के रूप में कैसे मैं इस बारे में जा रहा हूँ करने के लिए कुछ उदाहरण कोड है:

UIButton *button; 
UIBarButtonItem *barButton1,*barButton2; 

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal]; 
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height); 
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
barButton1 = [[UIBarButtonItem alloc] initWithCustomView:button]; 


button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:[UIImage imageNamed:@"bart_tb.png"] forState:UIControlStateNormal]; 
button.bounds = CGRectMake(0,0,button.imageView.image.size.width, button.imageView.image.size.height); 
[button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside]; 
barButton2 = [[UIBarButtonItem alloc] initWithCustomView:button]; 

NSArray *items = [NSArray arrayWithObjects: barButton1, barButton2, nil]; 
[self.toolbar setItems:items animated:NO]; 
+0

क्या आपने कभी इसे हल किया है? – mk12

+0

मैं टूलबार के साथ काम करने में कभी सक्षम नहीं था। मैं सिर्फ रहस्यमय रिक्त स्थान से छुटकारा पाने के बारे में नहीं समझ सका। मैं इसके बजाय एक UITabBar का उपयोग करने के लिए स्विचिंग समाप्त हो गया और यह अब तक मेरी जरूरतों को पूरा कर लिया है। –

उत्तर

0
UIBarButtonItem *barButton1,*barButton2; 

barButton1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image1.png"] style:UIBarButtonItemStylePlain 
    target:self action:@selector(action:)]; 

barButton2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bart_tb.png"] style:UIBarButtonItemStylePlain 
    target:self action:@selector(action:)]; 

NSArray *items = [[NSArray alloc] initWithObjects: barButton1, barButton2, nil]; 
[barButton1 release]; 
[barButton2 release]; 
[self.toolbar setItems:items animated:NO]; 
[items release]; 

यह है कि पसंद है .. और आप बटन की चौड़ाई को बदलना चाहते हैं, चौड़ाई गुण सेट UIBarButtonItem ऑब्जेक्ट्स के। चौड़ाई का डिफ़ॉल्ट मान 0 है, जो इसे अपनी छवि/शीर्षक के अनुरूप बिल्कुल बड़ा बनाता है।

उम्मीद है कि मदद करता है।

+0

आपके त्वरित उत्तर के लिए धन्यवाद। दुर्भाग्य से यह मेरे लिए काम नहीं किया। छवियां सफेद बक्से के रूप में दिखाई देती हैं (जबकि वे उपरोक्त विधि के साथ सही ढंग से दिखाई देते हैं) और अंतराल अभी भी वहां हैं, भले ही मैं UIBarButtonItem चौड़ाई वाली संपत्ति को बदलूं। मैंने यह सुनिश्चित करने के लिए फिर से जांच की कि मैं टूलबार के साथ कुछ और नहीं कर रहा हूं जो चीजों को गड़बड़ कर सकता है और मैं नहीं हूं। –

+0

मैंने इसे थोड़ी देर बाद संपादित किया है, सुनिश्चित करें कि आप [UIImage imageNamed: @ "] का उपयोग कर रहे हैं; यहां तक ​​कि यदि आपको अभी भी कोई समस्या हो रही है, तो यह तरीका भी किया जाना चाहिए जैसा मैंने आपको दिखाया था, यूआई बटन के साथ नहीं। यदि आपके पास दो बारबटनटिम्स हैं, तो मुझे लगता है कि वे टूलबार के किसी भी छोर पर जाएंगे, मुझे लगता है कि वे स्वचालित रूप से स्वयं को स्थानांतरित कर देते हैं। आप अपने इंटरफ़ेस को सभी रखे जाने के लिए आईबी फ़ाइल का उपयोग करने का प्रयास करना चाहेंगे और फिर इसे सुनिश्चित कर सकते हैं सभी गुणों को सेट करें क्योंकि वे निब में हैं। – mk12

+0

हाँ, मैं [UIImage imageNamed ...] का उपयोग कर रहा हूं। समस्या यह है कि यह विधि केवल छवि का अल्फा लेती है और मैं रंगीन छवियों का उपयोग करना चाहता हूं। दूसरा मुद्दा यह है कि अंतराल तब भी होता है जब मैं पांच आइटम जोड़ता हूं, जिससे 5 वें टूलबार के दाहिने तरफ आंशिक रूप से समाप्त हो जाता है। क्या इन अंतराल को पूरी तरह से निकालने का कोई तरीका है? –

5

यदि आप प्रत्येक आइटम के बीच स्पैसर जोड़ते हैं, तो दूरी को स्वयं ही काम करना चाहिए। आपके मामले में आप एक स्पेसर को दो बटनों के बीच और बीच में एक को रखना चाह सकते हैं। तुम इतनी तरह कर सकते हैं:

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

NSArray *items = [[NSArray alloc] initWithObjects: spacer, barButton1, spacer, barButton2, spacer, nil]; 

[spacer release]; 

ध्यान दें कि आप भी UIBarButtonSystemItemFixedSpace उपयोग कर सकते हैं, लेकिन आप यह है 'चौड़ाई' संपत्ति स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता होगी। जबकि UIBarButtonSystemItemFlexibleSpace आपके लिए यह काम करता है यह प्रतीत होता है।

+0

यह पूरी तरह से काम किया। – galactikuh

2

मैंने इस समस्या को हल किया है, आपको प्रत्येक बटन से पहले और बाद में लचीली वस्तु का उपयोग करना चाहिए।

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

बस टूलबार में सेट होने वाली वस्तुओं की अपनी सरणी में लचीला स्पेस जोड़ें।

पेज। मैंने इससे छुटकारा पाने से पहले लगभग खुद को मार डाला है और यूआईटीयूएलबार के बजाय अन्य सलाखों का उपयोग करके सभी प्रकार के समाधानों का प्रयास किया है।

+0

यह बाएं और दाएं स्थान पर अंतर के साथ नहीं है, केवल अंतर-बटन अंतरण। –

2

अच्छा, यह वास्तव में एक पुराना सवाल है, लेकिन मैं बस एक ही मुद्दे में भाग गया और इसे हल करने में कामयाब रहा।

जादू पासवर्ड UIBarButtonItemStyleBordered होने के लिए UIBarButtonItem शैली सेट कर रहा है।

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:aView]; 
item.style = UIBarButtonItemStyleBordered; 

Thats यह ...

+0

नोट, यदि आप 'UIBarButtonItem' के लिए कस्टमव्यू सेट करते हैं तो आप अपने लक्ष्य और कार्रवाई पर कॉल खो देंगे। उस स्थिति में लक्ष्य और क्रिया जोड़ने के लिए, 'UIButton' का उपयोग कस्टम व्यू के रूप में करें और उस पर लक्ष्य और क्रिया जोड़ें, या यदि आप' UIImageView' का उपयोग कर रहे हैं तो उस पर 'UITapGestureRecognizer' जोड़ें। – Hemang

2

यह अंतर की भरपाई के लिए आइटम के बीच एक नकारात्मक चौड़ाई के साथ एक निश्चित जगह आइटम जोड़ने के लिए संभव है।

UIBarButtonItem *fixedSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 
fixedSpace.width = -12.0f; 
1

मुझे एक ही समस्या से मुलाकात हुई। अंत में, मैंने इसे UIToolbar subclassing द्वारा हल किया और लेआउट सबव्यू विधि को ओवरराइड किया।

- (void)layoutSubviews { 

    [super layoutSubviews]; 

    if (leftItem_ && leftItem_.customView 
     && [leftItem_.customView isKindOfClass:[UIButton class]]) { 
    CGRect newFrame = leftItem_.customView.frame; 
    newFrame.origin.x = 0; // reset the original point x to 0; default is 12, wired number 
    leftItem_.customView.frame = newFrame;  
    } 

    if (rightItem_ && rightItem_.customView 
     && [rightItem_.customView isKindOfClass:[UIButton class]]) { 
    CGRect newFrame = rightItem_.customView.frame; 
    newFrame.origin.x = self.frame.size.width - CGRectGetWidth(newFrame); 
    rightItem_.customView.frame = newFrame; 
    } 

} 
17

आप के लिए देख रहे हैं या डिफ़ॉल्ट से भी कम समय भी 0 लंबवत स्पेसिंग (मेरे जैसे) है कि काम करने के लिए आप UIToolBar खरीदने automaticall है साथ लेआउट UIBarButtonItems है, यहां मैं सुझाऊंगा कि:

UIToolBar यह आइटम निजी रूप से लेआउट करता है। ऐप्पल इंजीनियरों वास्तव में डेवलपर्स को उस पर ओवरराइट करने की उम्मीद नहीं करेंगे। डिफ़ॉल्ट 10 प्वाइंट क्षैतिज रिक्ति को ओवरराइट करने के लिए एक निश्चित रिक्त स्थान का उपयोग करना पर्याप्त नहीं है। के बाद से UIToolbar कम से कम 10 बिंदु के अलावा अपने आइटम लेआउट, आप इन UIBarButtonItems की चौड़ाई -10 करने के लिए कोई रिक्ति प्राप्त करने के लिए सेट के रूप में निम्न कोड दिखाता है:

CGFloat toolbarHeight = 44.0; 
CGRect toolbarFrame = CGRectMake(0,0, self.view.bounds.size.width, toolbarHeight); 
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:toolbarFrame]; 

UIBarButtonItem* noSpace = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 
UIBarButtonItem* noSpace1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] autorelease]; 

noSpace.width = -10.0; 
noSpace1.width = -10.0; 

[toolbar setItems:[NSArray arrayWithObjects: 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil] autorelease], 
        noSpace, 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil] autorelease], 
        noSpace1, 
        [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil] autorelease] 
        , nil]]; 
+1

निराशाजनक है कि ऐप्पल इसे एक और अधिक सुरुचिपूर्ण तरीके से करने का कोई तरीका नहीं प्रदान करता है – jjxtra

1

मैं द्वारा Xcode4 में इस का समाधान करने में सक्षम था एक लचीली जगह को बाएं अधिकांश आइटम के रूप में डालें, और फिर दूसरा सबसे सही आइटम के रूप में रखें।

enter image description here
enter image description here

+0

यह प्रश्न अभी भी प्रासंगिक है, और यह अभी जवाब है (3 साल बाद!) – Troy

2

दो बार बटन के बीच में आप UIBarButtonSystemItemFixedSpace ले सकते हैं। और चौड़ाई समायोजित करें। यह मेरे लिए काम किया है।

0

मुझे आज भी यही समस्या का सामना करना पड़ा और इसे एक आसान तरीके से हल किया गया, तो साझा करना।

आप एक नया यूआईवीव एक ही नंबर ले सकते हैं। टूलबार पर बटन का आप दिखाना चाहते हैं। और फिर बस टूलबार के अनुसार आकार सेट करें।

टूलबार के ऊपर सामान्य बटन टूलबार बटन की तरह दिखेंगे।

संबंधित मुद्दे