2012-11-18 9 views
8

मैं एक आईपैड डैशबोर्ड तरीके से दो सरल कंटेनर के साथ एक व्यू लेआउट को कार्यान्वित करने का प्रयास कर रहा हूं।स्टोरीबोर्ड, इंटरैक्शन और मुद्दों को देखने के लिए कंटेनर व्यू

मैं कई उदाहरणों के माध्यम से पढ़ रहा हूं और निश्चित रूप से ऐप्पल व्यू कंट्रोलर संदर्भ दृश्य नियंत्रकों के संदर्भ में और सामान्य रूप से लेकिन मेरे पास एक सबसे अजीब मुद्दा है जो उम्मीद है कि एक सरल स्पष्टीकरण है।

मैंने दो दृश्य कंटेनर को एक तरफ जोड़ा है, प्रत्येक जो व्यू कंट्रोलर को एक अलग पृष्ठभूमि रंग, एक गोल रेक्ट बटन और एक लेबल रखेगा। और परीक्षण उद्देश्यों के लिए मैंने "mainViewController" में एक राउंड रेक्ट बटन भी जोड़ा है।

तो काफी सीधे आगे और सरल। प्रत्येक दृश्य कंटेनर व्यू में लोड हो जाता है, हालांकि मैं उनमें से किसी के साथ बातचीत नहीं कर सकता (जब बटन क्लिक किया जाता है, कुछ भी नहीं होता है, कोई नीली हाइलाइटिंग नहीं होती है, इसलिए यह प्रतिनिधि का सवाल नहीं है या बटन से कोई भी कार्रवाई प्राप्त नहीं हुई है या नहीं ऐसा कुछ भी लागू नहीं किया गया है)। हालांकि, बटन को क्लिक करके मैंने "कंटेनर कंट्रोलर" को दो कंटेनर धारण किया है, जो बिना किसी काम करता है (हमेशा के रूप में नीला चमकता है)। एक और अजीब चीज यह है कि पृष्ठभूमि रंग कंटेनर विचारों पर भी नहीं दिखाया गया है ?! केवल बटन और लेबल।

कार्यक्रम इस प्रकार है:

फ़ाइलें: ViewController.h और मीटर sidebarViewController.h और मीटर (इन फ़ाइलों में बदल कुछ भी नहीं, UIViewController) resultsViewController.h और मीटर ("mainViewController" है) (कुछ भी नहीं इन फ़ाइलों में बदल गया है, UIViewController) AppDelegate.h और मीटर (कोई परिवर्तन नहीं) स्टोरीबोर्ड

ViewController.h, दुकानों बनाया है और स्टोरीबोर्ड में प्रत्येक कंटेनर दृश्य से जुड़ा है।

#import <UIKit/UIKit.h> 
#import "sidebarViewController.h" 
#import "resultsViewController.h" 

@interface ViewController : UIViewController 

@property (nonatomic, weak) IBOutlet UIView *sidebarView; 
@property (nonatomic, weak) IBOutlet UIView *resultsView; 


@end 

स्टोरीबोर्ड पहचानकर्ता स्टोरीबोर्ड में दोनों साइडबार व्यू कंट्रोलर और परिणामदृश्य नियंत्रक के लिए सेट स्टोरीबोर्ड पहचानकर्ता।

ViewController.m, सब कुछ पुस्तक के द्वारा किया जाता है (या शायद नहीं, लेकिन क्या कम से कम यह मेरे लिए की तरह लगता है)

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize sidebarView,resultsView; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

UIStoryboard *storyboard = self.storyboard; 
sidebarViewController *sideVC = [storyboard instantiateViewControllerWithIdentifier:@"SidebarViewController"]; 
resultsViewController *resultsVC = [storyboard instantiateViewControllerWithIdentifier:@"ResultsViewController"]; 

//sidebarViewController *sideVC = [[sidebarViewController alloc]init]; 
//rresultsViewController *resultsVC = [[resultsViewController alloc]init]; 
[self addChildViewController:sideVC]; 
sideVC.view.frame = self.sidebarView.frame; 
[self.sidebarView addSubview:sideVC.view]; 
self.sidebarView.userInteractionEnabled = YES; 
[sideVC didMoveToParentViewController:self]; 

[self addChildViewController:resultsVC]; 
resultsVC.view.frame = self.resultsView.frame; 
[self.resultsView addSubview:resultsVC.view]; 
self.resultsView.userInteractionEnabled = YES; 
[resultsVC didMoveToParentViewController:self]; 

} 

(मैं self.xxxxView रूप में अच्छी तरह मिला है, और यह भी था क्रम में सबसे पहले addChildViewController कथन)

ठीक है तो मेरा संदेह यह है कि इसमें दृश्य पदानुक्रम के साथ कुछ करना है, विचार रूटव्यू कंट्रोलर व्यू के पीछे "पीछे" हैं, और केवल क्लिक करने योग्य नहीं दिखाए गए हैं। इसे काम करने के लिए ऐप प्रतिनिधि में क्या (अगर कुछ) किया जाना चाहिए? या मैंने इस कोड में कुछ और गलत किया है?

संपादित करें: गलत क्या हो सकता है इसके बारे में एक और सुराग मिला: जब मैंने स्टोरीबोर्ड के लिए "ऑटो लेआउट" अक्षम किया, तो विचार दिखाए गए और काम किया (!) लेकिन पूरी तरह से विकृत हो गया, लेकिन अब कम से कम मुझे सही पृष्ठभूमि रंग मिलता है और बटन काम कर रहे हैं। कोई भी ऑटो लेआउट अक्षम किए बिना इसे ठीक करने का तरीका जानता है? क्योंकि मुझे लगता है कि मुझे अपने सभी लेआउट प्रोग्रामेटिक रूप से करना है? :(

बहुत धन्यवाद,

उत्तर

2

सभी कि कोड आप अनावश्यक है, और शायद क्या अपनी समस्याओं खड़ी कर रहा है। जब आप आईबी में अपने कंटेनर दृश्य जोड़े गए है, यह अपने आप आपके लिए उन एम्बेडेड दृश्य नियंत्रकों बनाता है (और उन्हें कंटेनर व्यू का आकार बदलने के लिए आकार देता है)। क्या आप उन्हें प्राप्त कर चुके थे? आपको बस अपनी कक्षाओं को अपने उप-दृश्य दृश्य नियंत्रकों के वर्गों में बदलना है।यदि आपको अपने "मुख्य" दृश्य नियंत्रक से इन नियंत्रकों तक पहुंचने की आवश्यकता है, तो आप उन्हें बच्चे दृश्य नियंत्रक संपत्ति से संदर्भ प्राप्त कर सकते हैं।

+0

त्वरित उत्तर के लिए धन्यवाद। हां, मैं उन्हें प्राप्त करता हूं, और वे निश्चित रूप से बॉक्स से बाहर काम कर रहे हैं, समस्या यह है कि मैं इन विचारों को प्रोग्रामिक रूप से स्विच करना चाहता हूं (अन्य नियंत्रकों के लिए जिनके पास नए बाल नियंत्रक हैं)। मैंने अभी तक "एम्बेड सेक" को बदलने का कोई तरीका नहीं देखा है, इसलिए मैं अनुरोध पर विभिन्न नियंत्रकों को एम्बेड कर सकता हूं, अगर ये एम्बेडेड नियंत्रक के बच्चे नहीं हैं? –

+0

@AndreasKlintberg, SideBarViewController और परिणामView नियंत्रक आपके द्वारा स्वचालित रूप से आईबी में प्राप्त 2 नियंत्रक हैं, या क्या आप इन्हें स्विच करने का प्रयास कर रहे हैं? – rdelmar

+0

कोई भी नया नहीं है जिसे मैंने बनाया है, क्योंकि मैं एम्बेड सेग्स का उपयोग नहीं करना चाहता था (क्योंकि इन्हें प्रोग्रामेटिक तरीके से निपटाया नहीं जा सकता है, या कम से कम मुझे इसका संदर्भ नहीं मिला है?) –

संबंधित मुद्दे