2011-11-10 3 views
8

मैं अपने UIBarButtonItem को दोबारा बदलने की कोशिश कर रहा हूं ताकि यह यूएनविगेशनबार के शीर्ष और दाएं के खिलाफ अपने किनारों के साथ बैठ सके। मुझे यह करने के तरीके पर this accepted answer मिला, लेकिन मुझे वास्तव में यह समझ में नहीं आता कि इसे कैसे कोड किया जाए।लेआउट ओवरराइड लेआउट ओवरव्यू [सुपर लेआउटसब्यूव्यू] को कॉल करने के लिए और फिर बटन के दृश्य को ढूंढें और दोबारा बदलें

मैंने CustomNavBar नामक एक नई कक्षा बनाकर शुरू किया है जो UINavigationBar से प्राप्त होता है। मैं तो कार्यान्वयन में इस विधि रखा:

- (void) layoutSubviews 
{ 


} 

क्या मुझे समझ नहीं आता जवाब यह है कि

call [super layoutSubviews] and then find and reposition the button's view. 

मैं यह कैसे कोड है कहते हैं में हिस्सा है? सही दिशा में भी एक झुकाव सहायक होगा। धन्यवाद!

उत्तर

15

बटन आप ले जाना के बाद आप layoutSubviews कहते हैं क्योंकि यह जहां आईओएस यह हर बार layoutSubviews कहा जाता है होना चाहता है के लिए पुनर्निर्धारित किया जाएगा चाहते हैं।

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    for (UIView *view in self.subviews) { // Go through all subviews 
     if (view == buttonYouWant) { // Find the button you want 
      view.frame = CGRectOffset(view.frame, 0, -5); // Move it 
     } 
    } 
} 
3

आप subviews के माध्यम से और पाश अगर मौजूदा एक के बाद एक उदाहरण के लिए NSClassFromString उपयोग करते हुए, इस तरह से आप चाहते तुलना कर सकते हैं:

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    for (UIView *view in self.subviews) { 
     if ([view isKindOfClass:NSClassFromString(@"TheClassNameYouWant")]) { 
      // Do whatever you want with view here 
     } 
    } 
} 

तुम भी NSLog में पाश के लिए करने के लिए इस्तेमाल कर सकते हैं विभिन्न सबव्यू देखें।

+2

आप कभी भी [TheClassNameYouWant क्लास] 'के बजाय 'NSClassFromString' का उपयोग क्यों करना चाहते हैं? बाद के मामले में, आपको एक रिफैक्टर के बाद चेतावनियां मिलेंगी, जो आप पहले मामले में नहीं करेंगे। – Zappel

+0

मुझे लगता है कि '[TheClassNameYouWant क्लास] 'और अधिक प्रदर्शन करने वाला होना चाहिए – yano

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

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