तो, मैं एक ऐसी ही मुद्दा था, और मामले में अन्य लोगों के लाभ हो सकता है, मैं समझ मैं इसे साझा करना चाहते हैं, के बाद से मैं stackoverflow से इतना लाभ होता है।
यह समाधान आपको एक अनुकूलनशील पॉपओवर segue के एंकर सेट करने की अनुमति देता है। यह आपको सेग्यू को मोडल करने के लिए कॉन्फ़िगर करने की अनुमति देता है या नहीं (मुझे बाहरी संदर्भ को कम करके segue को रोकने का कोई तरीका नहीं मिल सका, इसलिए यदि कोई जानता है कि यह कैसे करना है, तो मुझे यह सुनने में रूचि होगी); यह पॉपओवर नियंत्रक के लिए पासथ्रू दृश्यों को सेट करके पूरा किया जाता है। मैंने स्रोत व्यू कंट्रोलर के दृश्य के बजाय कस्टम व्यू निर्दिष्ट करने की क्षमता भी जोड़ा (क्योंकि मुझे इस क्षमता की आवश्यकता है); यह हिस्सा समाधान के लिए महत्वपूर्ण नहीं है।
DynamicPopoverSegue.h
@interface DynamicPopoverSegue : UIStoryboardPopoverSegue
@property BOOL isModal;
@property UIView* sourceView;
@property CGRect anchor;
@end
DynamicPopoverSegue.m
@implementation DynamicPopoverSegue
- (void)perform
{
if (!self.popoverController.popoverVisible)
{
UIViewController* dst = (UIViewController*)self.destinationViewController;
UIViewController* src = (UIViewController*)self.sourceViewController;
UIView* inView = _sourceView ? _sourceView : src.view;
self.popoverController.contentViewController = dst;
if (!_isModal)
{
[self.popoverController setPassthroughViews:[[NSArray alloc] initWithObjects:inView, nil]];
}
[self.popoverController presentPopoverFromRect:_anchor
inView:inView
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
@end
तो फिर तुम सिर्फ "कस्टम" स्टोरीबोर्ड में करने के लिए अपने segue निर्धारित करते हैं, और segue वर्ग के लिए "DynamicPopoverSegue" की स्थापना की। मेरे मामले में, चूंकि मैं इसे एक दृश्य में गतिशील परतों से जोड़ना चाहता था, इसलिए मैं एंकर सेट नहीं कर सका, इसलिए मैंने व्यू कंट्रोलर के नीचे बार में व्यू कंट्रोलर आइकन से कंट्रोल कंट्रोलर आइकन पर क्लिक करके सीगू बनाया, जो व्यू कंट्रोलर था popupover प्रस्तुत करने के लिए उपयोग कर रहे हैं।
पॉपओवर segue कॉल करने के लिए:
[self performSegueWithIdentifier:@"MyPopoverSegue" sender:self];
और पॉपओवर segue कॉन्फ़िगर करने के लिए:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"MyPopoverSegue"])
{
DynamicPopoverSegue* popoverSegue = (DynamicPopoverSegue*)segue;
// set the anchor to wherever you want it to be
popoverSegue.anchor = _destinationFrame;
}
}
स्रोत
2014-09-04 16:27:31
धन्यवाद:
यहाँ स्विफ्ट संस्करण है। वास्तव में मुझे क्या चाहिए। मैं यह देखने के लिए अपना पहला विचार करने जा रहा हूं कि प्रदर्शन के प्रेषक WegueWithIdentifier कॉल एंकर बन जाता है या नहीं। अगर यह काम नहीं करता है तो मैं दूसरे विचार के साथ जाऊंगा। –