2012-07-05 29 views
18

बदलने के साथ एक ही स्थिति में वर्तमान यूआईपीओवर कंट्रोलर के लिए समान समन्वय बनाए रखना है जिसमें केवल तीर ऑफसेट बदल रहा है। तो मूल रूप से मेरे पास उनमें से प्रत्येक को छूने वाले तीन बटन एक पॉपओवर दिखाते हैं। इस पॉपओवर को प्रस्तुत करते समय यह स्क्रीन पर स्थिति बदलता है, लेकिन मुझे वह नहीं चाहिए। screenoshots पर और अधिक स्पष्ट नजर होने के लिए:वर्तमान यूआईपीओवर कंट्रोलर केवल तीर ऑफसेट

enter image description here

enter image description here

enter image description here

+1

+1, यह एक दिलचस्प सवाल है। –

उत्तर

15

मेरी पॉपओवर के लिए मैं ऊपर-बाईं ओर शीर्ष केंद्र के बजाय होने के लिए (जो डिफ़ॉल्ट है) तीर चाहता था।

मैंने UIPopoverController की popoverLayoutMargins संपत्ति सेट करके नीचे परिणाम (स्क्रीनशॉट) प्राप्त करने में कामयाब रहा है। आप पॉपओवर को कहां दिखाना है यह निर्धारित करने के लिए यूआईपीओवर कंट्रोलर की आंतरिक गणना में उपयोग किए जाने वाले स्क्रीन-क्षेत्र को कम करने के लिए इसका उपयोग कर सकते हैं।

UIPopovercontroller arrow on the left

कोड:

// Get the location and size of the control (button that says "Drinks") 
CGRect rect = control.frame; 

// Set the width to 1, this will put the anchorpoint on the left side 
// of the control 
rect.size.width = 1; 

// Reduce the available screen for the popover by creating a left margin 
// The popover controller will assume that left side of the screen starts 
// at rect.origin.x 
popoverC.popoverLayoutMargins = UIEdgeInsetsMake(0, rect.origin.x, 0, 0); 

// Simply present the popover (force arrow direction up) 
[popoverC presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

मुझे लगता है कि आप ऊपर अदल-बदल करके वांछित परिणाम प्राप्त करने में सक्षम हो जाएगा।

+0

सेटिंग popoverLayoutMargins। धन्यवाद। – Bastek

+0

एक इलाज करता है, धन्यवाद। – rosshump

+0

स्रोत दृश्य के अंदर एक बिंदु पर तीर टिप को रखने का कोई तरीका है। मैं पूरी स्क्रीन का उपयोग स्रोत दृश्य के रूप में कर रहा हूं, ताकि जब डिवाइस अभिविन्यास में परिवर्तन हो, तो मैं केवल स्रोत आयत बदलता हूं, जो 1x1 इकाइयों का आकार होता है। समस्या यह है कि तीर उस स्थान के दायीं ओर है जहां यह माना जाता है। – rraallvv

1

आप यह नहीं कर सकते एप्पल में निर्मित UIPopoverViewController वर्ग साथ किया जाता है। लेकिन यह आपके स्वयं के पॉपओवर व्यू कंट्रोलर को लागू करने के लिए काफी सरल और तार्किक होना चाहिए (केवल कुछ बहुत ही बुनियादी 2 डी ज्यामिति और UIView के दस्तावेज़ों में खुदाई का थोड़ा सा)।

+1

यह ऐप्पल के पॉपओवर के साथ किया जा सकता है। यदि आप तालिका दृश्य पंक्तियों से पॉपओवर देखते हैं, तो तीर पंक्ति के रूप में पंक्ति का अनुसरण कर सकते हैं। इसलिए, यदि तीर एक दृश्य में एक रेक्ट से जुड़ा हुआ है, तो आप उस दृश्य को स्थानांतरित कर सकते हैं और तीर का पालन करेगा। – Gabriel

+0

लेकिन क्या सामग्री रीक्ट अपनी मूल स्थिति में रहेगी? क्या यह केंद्र होने के लिए तीर का पालन नहीं करेगा? –

+0

नहीं। मेरे ऐप में पॉपओवर बड़ा है, सभी जगह नीचे तक उपलब्ध है। तीर एक दृश्य दृश्य के मास्टर व्यू में तालिका दृश्य की एक पंक्ति को इंगित कर रहा है। जब अंत में एक नई पंक्ति प्रकट होती है और तालिका दृश्य स्क्रॉल होता है, तो पंक्ति पंक्ति का पालन करती है। – Gabriel

1

हाँ, आप यह कर सकते हैं। आपको अल्फा = 0.0 एफ के साथ एक ऑक्स व्यू बनाना होगा, और तीर को मार्गदर्शन करने के लिए इसका उपयोग करना होगा।

उदाहरण के लिए:

auxView = [[UIView alloc] initWithFrame:firstButton.frame]; 
auxView.alpha = 0.0 ; 
auxView.userInteractionEnabled = NO; 
[firstButton.superView addSubview:auxView]; 
[auxView release]; 

ठीक है, अब आप खुले पॉपओवर तीर के गाइड के रूप में उस दृश्य का उपयोग कर। कि इस कदम के लिए

auxView.frame = secondButton.frame; 

उपयोग एनिमेशन अगर आप चाहते हैं:

[thePopoverController presentPopoverFromRect:auxView.bounds inView:auxView 
      permitedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; 

और अब आप केवल देखने बढ़ना है।

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

presentPopoverFromRect:CGRectInset(auxView.bounds, 4.0, 4.0) 
+0

आईओएस 6.0 सिम पर चलाएं, काम नहीं करता है। – CodaFi

+0

@ कोडाफ़ी क्या वास्तव में काम नहीं करता है? तीर चलती दृश्य का पालन नहीं करता है? – Gabriel

+0

हां, लेकिन पॉपओवर इसके साथ चलता है! – CodaFi