2013-08-06 1 views
7

मैं एक UIView जो तीन कंटेनरोंUITableView की चोटी पर एक UIView बढ़ते - छू शीर्ष UIView अभी भी तालिका पंक्तियों का चयन करता है

Container A - contains a UITableView 
Container B - contains Container C and Container O 
Container C - contains a UITableView 
* - touch event 
@ - touch event 

---------------------- 
|  |    | 
| ---*|  B  | 
| --- |    | 
| -A- | ----------- | 
| --- ||@----C---- | | 
|  | ----------- | 
---------------------- 

एक घटना होता है, जहां मैं (कंटेनर बी के फ्रेम बदलाव और मैं एक दिखाने के शामिल बी के दाईं ओर ओ (लेबल ओ) देखें, जो महत्वपूर्ण नहीं है)। अब कंटेनर बी कंटेनर एक

O - Other view (unimportant) 
$ - original location of touch @ 

---------------------- 
| |    | | 
| --|*  B  | | 
| --|    | | 
| -A|------------ |O| 
| --||@-$--C----| | | 
| |------------ | | 
---------------------- 

लेकिन अब अतिव्यापी है, जब मैं, स्पर्श कंटेनर एक के UITableView द्वारा पंजीकृत किया जा रहा है पंक्ति (@) के बाएँ किनारे को छूकर कंटेनर सी UITableView में एक पंक्ति का चयन करने का प्रयास करें। या यहां तक ​​कि अगर मैं तालिका (*) के ऊपर दृश्य को स्पर्श करता हूं, तो ए में संबंधित पंक्ति का चयन किया जाता है।

मैं कंटेनर ए के UITableView की चौड़ाई को बदलकर समस्या का हिस्सा हल कर सकता हूं। लेकिन फिर भी मुझे समस्या है जहां मैं तालिका सी (@) स्पर्श करता हूं, सी की पंक्ति का चयन नहीं होता है। ऐसा लगता है कि टेबल सी की शुरुआत पुराने स्थान ($) में है।

तो मैं क्या कर सकता हूं ताकि नए @ स्थान पर टैप करने से सी में सही पंक्ति का चयन किया जा सके?

=======

कुछ कोड के साथ संपादित करें:

इस कोड कंटेनर बी में मुझे क्या करना है यह बी के फ्रेम का एक बहुत ही सीधे आगे एनीमेशन है। self.view कंटेनर बी के UIView है।

स्टोरीबोर्ड के माध्यम से सभी दृश्य स्क्रीन पर हैं ("अन्य" कंटेनर छुपा हुआ है)। अन्य कंटेनर बी

// this code basically aligns the "other" container to the right/"offscreen" of 
// Container B. Yes extending beyond the frame of B, but this part works fine 
CGRect otherContainerFrame = self.otherContainerView.frame; 
otherContainerFrame.origin.x = CGRectGetMaxX(self.view.frame); 
[self.otherContainerView setFrame:otherContainerFrame]; 
[self.otherContainerView setHidden:NO]; 

// I'm going move Container B by the width of the "other" view 
float offset = CGRectGetWidth(self.otherContainerView.frame); 

CGRect frame = self.view.frame; 
frame.origin.x -= offset; 
[UIView animateWithDuration:.35 
       animations:^{ 
        [self.view setFrame:frame]; 
       } 
]; 

का एक सबव्यूव है कृपया मुझे बताएं कि आप कौन सा कोड देखना चाहते हैं।

+0

बहुत अच्छा विवरण है, लेकिन मुझे लगता है कि हम कोड आप दिखाने के लिए और करने के लिए अपने कंटेनर चेतन करने के लिए उपयोग देखने की जरूरत इस समस्या को हल करें ... – Beppe

+1

@ बेप, मैंने एनीमेशन के लिए कोड जोड़ा। सुझाव के लिए – David

उत्तर

0

तो मैं करने के लिए पता चलता है डाउनलोड किया के सामने है दृष्टि से देखें (3 डी में) विचारों के साथ क्या हो रहा था। ऐसा लगता है कि मैंने खींचे गए चित्र पूर्ण नहीं हैं, और भ्रामक हैं।

प्रत्येक कंटेनर ए और बी (जो UIViews हैं) में सब्यूव्यू ए 'और बी' (UIViews) शामिल हैं। एनीमेशन ब्लॉक में जब मैं self.view बदल रहा था, मैं वास्तव में बी के लिए फ्रेम को स्थानांतरित कर रहा था। फ्रेम बी

की सीमा
---------------------- 
| A' |  B'  | 
| ---*|  B  | 
| --- |    | 
| -A- | ----------- | 
| --- ||@----C---- | | 
|  | ----------- | 
---------------------- 

तो भी बी 'एक और एक ओवरलैपिंग था' से बाहर जा रहा था, मैं विचारों के पदानुक्रम में लगता है, स्पर्श अभी भी अंतर्निहित subviews द्वारा कब्जा कर लिया है (कंटेनर) ए और बी। मैं पूरी तरह से नहीं सोचता कि यह कैसे होना चाहिए, लेकिन मुझे लगता है कि चीजें कैसे गिरती हैं।

वैसे भी, समाधान सरल था।

के बजाय:

[self.view setFrame:frame]; 

मैं अनिवार्य रूप से करने जा रहा हूं:

[self.view.superview setFrame:frame]; 
0

एमएमएम ... सुनिश्चित नहीं है कि यह आपके मामले में काम करता है, लेकिन अपने एनीमेशन को एक बड़े कंटेनर में प्रबंधित करने का प्रयास करें जो आपके सभी अन्य कंटेनर को पकड़ ले।

मेरा मतलब है, एक कंटेनर जेड ए, बी, ओ और उनके subviews जिसमें बना सकते हैं और जेड से बी की स्थिति चेतन करने की कोशिश, कि बी जाँच ए

+0

धन्यवाद। मैंने तर्क को ए और बी के अभिभावक व्यू कंट्रोलर में स्थानांतरित कर दिया, और वही व्यवहार मौजूद है। – David