2009-07-02 15 views
7

प्राप्त करना मेरे पास UITableView में UITableView सेल में UIButton है। परिणाम इसमें बटन के साथ एक सूची है। जब UIButton दबाया जाता है, तो यह एक touchUpInside विधि को कॉल करता है, और सब बढ़िया है। मुझे इसमें समस्याएं आ रही हैं कि जब मैं दबाया जाता हूं तो बटन के स्थान (फ्रेम) से नया दृश्य ज़ूम करना चाहता हूं। मैं सिर्फ UIButtonUITableViewCell में एक UIButton और सीमाएं/फ्रेम

origButton.frame 

की सीमा से मिलता है, तो यह UITableCell, 3,50,40,25 की तरह कुछ के निर्देशांक में है। सूची में सभी बटनों के लिए यह वही है, इसलिए कोई फर्क नहीं पड़ता कि सूची में कौन सा बटन दबाया जाता है, फिर मुझे इन निर्देशांक मिलते हैं। अब, अगर मैं वास्तव में मेरे विचार

self.frame 

जब touchUpInside विधि कहा जाता है के निर्देशांक प्राप्त, मैं और अधिक प्रयोग करने योग्य कुछ मिलता है। मैं फिर अपने सेल के निर्देशांक प्राप्त करता हूं। महान!! इसलिए मैं UIButton से एक नया दृश्य ज़ूम कर सकता हूं। महान!!

लेकिन यहां समस्या है: यदि आप सूची को स्क्रॉल करते हैं, तो बटन टैप करें, दृश्य बटन से नहीं बल्कि स्क्रीन के नीचे एक स्थान से ज़ूम आउट करता है। समस्या यह है कि मेरे पास निर्देशांक सेल के लिए हैं, इससे पहले कि यह स्क्रॉल हो जाए। असल में सभी कोशिकाओं के लिए सभी निर्देशांक तालिका में अपने वास्तविक स्थानों को प्रतिबिंबित करते हैं, केवल पहले दृश्यमान सेट के निर्देशांक के साथ ही। स्क्रॉलिंग ने इन निर्देशांकों को नहीं बदला है।

मैंने सोचा कि शायद मैं सुपर व्यू के निर्देशांक का उपयोग कर सकता हूं, लेकिन उनको कोई मदद नहीं है।

कोई भी जानता है कि तालिका में सूचीबद्ध बटन (या विचार या कोई अन्य आइटम) के लिए सटीक निर्देशांक कैसे प्राप्त करें, या यह संभव नहीं है?

floatingView.center = CGPointMake(origButton.frame.origin.x + 
            origButton.frame.size.width/2, 
         self.frame.origin.y + self.superview.frame.origin.y); 

धन्यवाद:

यहाँ कैसे मैं अपने नए दृश्य के केन्द्र बिंदु की गणना है!

उत्तर

11

अद्यतन:

याद रखें एक UITableView एक scrollview है। इसलिए इसमें सामग्री दृश्य तालिका दृश्य (एक scrollView) के भीतर एम्बेडेड है।

जो फ्रेम आप प्राप्त कर रहे हैं वह सही है, लेकिन यह आपके इच्छित दृश्य फ्रेम के संदर्भ में नहीं है। इसके बजाय फ्रेम सामग्री दृश्य के संदर्भ में है। जैसे ही आप स्क्रॉल करते हैं, सामग्री contentView.frame के संदर्भ में नहीं बदलती है। हालांकि, contentView.frame तालिका के फ्रेम के संदर्भ में बदलता है जैसा कि आप स्क्रॉल करते हैं (सामग्री ऑफ़सेट की मात्रा से) देखें।

निम्न में से एक का उपयोग कर tableView को contentView के संदर्भ से सेल के फ्रेम कन्वर्ट:

- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view 

- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view 

या, मैन्युअल रूप से contentOffset बंद घटाना

तो यह 2 विकल्प छोड़ देता है फ्रेम।

मैं पहली विधि की अनुशंसा करता हूं।


मूल उत्तर:

मैं अगर तुम UITableViewCell subclassed या UITableViewController से इस कोड को प्रदर्शन कर रहे हैं यकीन नहीं है।

हालांकि, मुझे लगता है कि विधि आप चाहते है:

- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath 

इस UITableView की एक विधि है कि आप किसी भी सेल के लिए रेक्ट मिल जाएगा है।

+1

जब मैंने यह देखा तो मुझे बहुत उत्साहित हो गया। हालांकि लौटे निर्देशांक स्वयं के लिए समान हैं। फ्रेम। (मैंने UITableViewCell को उपclass किया है, और मेरी UIButton की स्पर्श विधि subclass के भीतर है।) उपरोक्त self.frame के लिए एक ड्रॉप-इन प्रतिस्थापन था। 0,158,32,480 एक सेल पर क्लिक और नीचे: 0,222,32,480 तालिका स्क्रॉल नीचे कोशिकाओं प्रकट करने के लिए, और फिर तालिका के पहले "पृष्ठ" में एक सेल पर क्लिक करना: यहाँ मूल्यों का एक उदाहरण है एक पर क्लिक करें: 0,2238,32,480 कोई अन्य विचार? – mahboudz

+0

मैंने –

+1

खाते में इसे लेने के लिए उत्तर अपडेट किया। बस! यहां मैंने जिस तरह से इसका इस्तेमाल किया है: सीजीआरईटी सेलफ्रेम = [self.superview convertRect: self.frame toView: tableViewController.view]; – mahboudz

7

मैं कुछ ऐसा ही करने की कोशिश कर रहा था। आईपैड पर, जब एक टेबल सेल चुना जाता है, तो मैं सेल के बगल में एक पॉपअप दिखाना चाहता था। निम्न कोड ऐसी चीज करने के लिए काम करता है। इस मामले में, स्वयं एक UITableViewController है।

CGRect rect = [cell.superview convertRect:cell.frame toView:self.view];