2011-02-17 5 views
5

जोड़ना मुझे three20 के साथ कोई समस्या है, मुझे उम्मीद है कि कोई मेरी मदद करने में सक्षम होगा।एक TTTableViewController (तीन20 से) को अन्य UIViewController

मेरे पास TTTableViewController है जो मैं ऐप three20 में नमूना परियोजनाओं का उपयोग करता हूं, इस तरह के समान ही उपयोग करता हूं। मेरे पास केवल तीन विधियां हैं जिन्हें मैं कार्यान्वित कर रहा हूं: (id)init, (void)createModel, और (id<UITableViewDelegate>)createDelegate। और मैंने अपने डेटा के लिए TTListDataSource और TTURLRequestModel उपclassed है। संक्षेप में, यह TTTableViewController का काफी सरल उपयोग है, मैं सामान्य से कुछ भी नहीं कर रहा हूं।

जब मैं UIView के वंशज को जोड़ता हूं, तो यह ठीक काम करता है। यह पूरी तरह से डेटा लोड और प्रदर्शित करता है। उदाहरण के लिए, निम्न दो काम ठीक:

FooTableViewController *controller = [[FooTableViewController alloc] init]; 
controller.view.frame = CGRectMake(288, 20, 480, 1004); 
[self.window addSubview:controller.view]; 

करता है के रूप में:

FooTableViewController *controller = [[FooTableViewController alloc] init]; 
controller.view.frame = CGRectMake(288, 20, 480, 1004); 

UIScrollView *scrollView = [[UIScrollView alloc] init]; 
scrollView.frame = CGRectMake(0, 0, 768, 1024); 
// a bunch of scrollView variable initializations.. 
[scrollView addSubview:controller.view]; 
[self.window addSubview:scrollView]; 

समस्या पैदा होती है जब मैं view को FooTableViewController (जो, फिर से, TTTableViewController का एक उपवर्ग है) को जोड़ने का प्रयास UIViewController के वंशज के। उदाहरण के लिए, उदाहरण नहीं है:

FooTableViewController *controller = [[FooTableViewController alloc] init]; 
controller.view.frame = CGRectMake(288, 20, 480, 1004); 

UIViewController *viewController = [[UIViewController alloc] init]; 
viewController.view.frame = CGRectMake(0, 20, 768, 1004); 
[viewController.view addSubview:controller.view]; 

[self.window addSubview:viewController.view]; 

कोई विचार क्यों ऐसा होता है? जैसे मैंने कहा, यह ठीक काम करता है जब मैं इसे UIView (यानी, जो UIViewController में नहीं है) में जोड़ता है, लेकिन जब मैं इसे UIViewController में जोड़ने का प्रयास नहीं करता हूं। जैसा कि मैंने ऊपर किया है, इसे जोड़ने की कोशिश करने के अलावा, मैंने UIViewController को उपclassing और इसे भीतर से जोड़ने की भी कोशिश की। कोई भाग्य नहीं।

धन्यवाद!

संपादित करें मुझे "यह काम नहीं करता" के माध्यम से मेरा क्या मतलब है, इस बारे में थोड़ा और स्पष्ट होना चाहिए। मैं बस एक खाली टेबल देखता हूं - बस खाली पंक्तियां। createModel पर ब्रेकपॉइंट डालने से वास्तव में पता चलता है कि उस विधि को नहीं कहा जा रहा है। धन्यवाद!

अद्यतन diwup पूरी तरह से मुझे सही समाधान की ओर इशारा किया। वह उसमें सही था क्योंकि TTTableViewController का viewWillAppear: और viewDidAppear: कॉल नहीं किया जा रहा था। मैंने इसे UIViewController (जिसे मैंने FooViewController कहा) को 0xको view में कक्षा के भीतर से जोड़कर सत्यापित किया (मैंने TTTableViewController परिवर्तनीय controller कहा)। मैं इस तरह के दो तरीकों को भी ओवरराइड करता हूं:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [controller viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [controller viewDidAppear:animated]; 
} 

और, देखो और देखो, यह काम करता है! बेशक, यह एक दीर्घकालिक समाधान नहीं है, मैं अभी भी यह जानना चाहता हूं कि viewWillAppear: और viewDidAppear: कैसे स्वयं को बुलाया जाए।

UPDATE2 मैं सिर्फ इतना तरह viewDidLoad: ओवरराइड करने का फैसला किया:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [super viewWillAppear:NO]; 
    [super viewDidAppear:NO]; 
} 

मैं इसके साथ बहुत खुश नहीं हूँ, यह hacky लगता है (और मैं शायद यकीन viewWillAppear: और viewDidAppear: बुलाया नहीं मिलता बनाना चाहिए दो बार), लेकिन मैं इसे एक दिन के साथ कॉल करने के लिए तैयार हूं।

+0

समाधान काम करता है! यदि कोई बेहतर समाधान है तो यह बहुत अच्छा होगा .. प्रत्येक नियंत्रक को रखने और दृश्य को कॉल करने के लिए कई टीटी नियंत्रकों का उपयोग करते हुए विल्लएपियर बहुत परेशानी होती है। – samwize

उत्तर

3

मेरा उत्तर प्रासंगिक नहीं हो सकता है। लेकिन मुझे संदेह है कि समस्या addSubview: विधि के साथ कुछ करने के लिए हो सकती है। चूंकि addSubview: दृश्य पदानुक्रम के शीर्ष स्तर पर दृश्य की गारंटी नहीं देता है, उस दृश्य के कुछ तरीकों को के दौरान या उसके बाद निकाल दिया नहीं जा सकता है:।, viewDidAppear: आदि आदि

इसलिए, यदि three20 के कोड उन इंटरफेस तरीकों पर निर्भर करता है, कोई बात बिगड़ जाए सकता है इन विधियों viewWillAppear शामिल हैं। मैं सुझाव दूंगा कि आप उस नियंत्रक को सामान्य रूप से प्रस्तुत करने का प्रयास करें और देखें कि क्या होगा।

+0

संकेत के लिए धन्यवाद। यह निश्चित रूप से मुझे अन्वेषण करने के लिए कुछ दिया गया है। मेरा मानना ​​है कि मैं जल्द ही 'UIViewController' के बारे में अधिक जानने जा रहा हूं ... :) – donkim

+0

मेरी खुशी। :) –

+0

असल में .. बस एहसास हुआ कि यह काम करने के लिए मेरा नमूना मूल रूप से वही बात करता है ... यह 'TTTableViewController' को सामान्य रूप से लोड किए बिना' व्यू' को अन्य 'UIView' में जोड़ता है। हमम .. लेकिन परवाह किए बिना, मुझे इस दिशा में सोचने के लिए धन्यवाद। :) – donkim

1

एक ही सवाल।

बस TTTableViewController का इंस्टेंस कॉल करें;

उदाहरण के लिए

:

TTTableViewController tableViewController; 
    [tableViewController createModel] 

और

[tableViewController updateView] 
viewDidLoad में

यह काम करता है।