सुनिश्चित नहीं है कि आपको UIButton की आवश्यकता है। यदि आप जो कर रहे हैं वह किसी क्रिया को प्रेषित कर रहा है, या किसी छवि के साथ बटन को कस्टमाइज़ करना भी है, तो UIBarButtonItem
पर्याप्त होना चाहिए।
यदि प्रस्तुति प्राप्त करने के लिए UIButton
से फ्रेम को पकड़ने के लिए आप क्या कर रहे हैं, तो मुझे लगता है कि UIBarButtonItem
की स्थिति का अनुमान लगाने के लिए आपको बेहतर सेवा दी जा सकती है। यह बहुत मुश्किल नहीं होना चाहिए, खासकर अगर यह आपके UINavigationItem
के leftBarButtonItem
या rightBarButtonItem
में से एक है।
मैं आमतौर पर केआईएसएस (इसे सरल रखें, बेवकूफ!) अंगूठे के नियम के लिए हूं। यहां तक कि ऐप्पल यह करता है ... जब आप स्प्रिंगबोर्ड से ऐप लॉन्च करते हैं, तो ऐप हमेशा ऐप के आइकन से नहीं, स्क्रीन के केंद्र से फैलता है।
बस एक सुझाव।
संपादित
ठीक है, मैं अभी-अभी पढ़ा UIPopoverController reference (मैं एक उपयोग नहीं किया है)। मुझे लगता है कि आप क्या चाहते हैं presentPopoverFromBarButtonItem:permittedArrowDirections:animated:
और अपने बीबीआई में पहले पैरामीटर के रूप में पास करने के लिए। आपकी समस्या का समाधान करने का तरीका मौजूद है - बीबीआई के पास कोई फ्रेम नहीं है क्योंकि वे NSView उप-वर्ग नहीं हैं। ऐप्पल जानता है कि आप इस तरह की चीज करना चाहते हैं, और इस विधि को प्रदान करते हैं। साथ ही, मुझे लगता है कि यदि आप इस विधि का उपयोग करते हैं, तो आपका ऑटोरोटेशन भी काम करेगा। मैं इसके बारे में गलत हो सकता हूं, इसे एक शॉट दें।
जहां तक आपके अनुकूलित लेआउट का संबंध है, मुझे लगता है कि यदि आप इसे UIView में दोहराते हैं और इसके साथ बीबीआई कस्टम बनाते हैं, तो आप बेहतर करेंगे। यह निश्चित रूप से आप पर निर्भर है।
किसी भी तरह से, आप इसे अपने एनआईबी के साथ आईबीओलेट के रूप में कनेक्ट करके बीबीआई का संदर्भ प्राप्त करते हैं, या जब आप इसे कोड में बनाते हैं तो इसका संदर्भ सहेजते हैं। फिर बस ऊपर वर्णित पॉपओवर विधि के संदर्भ को पास करें। मुझे लगता है कि यह आपके लिए काम कर सकता है।
MOAR
BBI सिर्फ अपने वर्ग के एक सदस्य है - यह पर एक मजबूत संदर्भ संपत्ति के साथ एक इवर, शायद अपने निब के लिए एक IBOutlet के रूप में जुड़े। फिर आप कक्षा में जो भी तरीका चाहते हैं उससे इसे एक्सेस कर सकते हैं।
उदाहरण: (यकीन नहीं मैं पॉपओवर नियंत्रक स्मृति प्रबंधन का अधिकार है)
@interface MyViewController : UIViewController {
UIBarButtonItem *item;
}
@property (nonatomic, retain) UIBarButtonItem *item;
@end
@implementation MyViewController
@synthesize item;
-(void)viewDidLoad {
// assuming item isn't in your NIB
item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlus target:self action:@selector(doit)];
self.navigationItem.rightBarButtonItem = item;
}
-(void)doit {
UIPopoverController *popover = [[[UIPopoverController alloc] initWithContentViewController:yourViewController] autorelease];
[popover presentPopoverFromBarButtonItem:self.item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
// or in the line above, replace self.item with self.navigationItem.rightBarButtonItem
}
@end
आप आदमी! मैं नेविगेशन इटम्स का परीक्षण करने में सक्षम नहीं हूं क्योंकि मैं यूआईटीयूएलबार का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है! धन्यवाद! – scooter133