2012-07-03 15 views
9

मेरे पास समूहबद्ध स्थैतिक UITableView के साथ UITableViewController है। मैं स्टोरीबोर्ड पर अपने स्थिर तालिका दृश्य के लिए कोशिकाओं को परिभाषित कर रहा हूं। कोशिकाओं में से एक में एक टेक्स्टफील्ड है। जब इस टेक्स्टफील्ड को कॉल किया जाता है, तो कीबोर्ड पॉप अप होता है, हालांकि, टेबलव्यू स्वचालित रूप से आकार बदलने वाला नहीं होता है जैसे कि यह आमतौर पर तालिका दृश्य नियंत्रक पर होता है। तो अब कीबोर्ड आंशिक रूप से टेक्स्टफील्ड को कवर कर रहा है और मैं स्क्रॉल नहीं कर सकता।UITableViewController और UITextField कीबोर्ड

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

धन्यवाद

+0

के लिए आप या तो ऊपर दृश्य स्थानांतरित कर सकते हैं या मैन्युअल रूप से इसे दोबारा आकार। – Dustin

+1

प्रश्न यह है कि यह सामान्य रूप से ऐसा क्यों नहीं कर रहा है जब यह सामान्य रूप से करता है? – Keith

+0

शायद क्योंकि आप एक स्थिर तालिका दृश्य का उपयोग कर रहे हैं (जैसे आपने अनुमान लगाया है)। स्टेटिक टेबल व्यू विशेष रूप से बदलने के लिए डिज़ाइन किए गए हैं - यही कारण है कि उन्हें "स्थिर" – Dustin

उत्तर

48

उत्तर

यह स्थिर कोशिकाओं के साथ कोई संबंध नहीं है। उन्हें काम करना चाहिए।

यदि आपका नियंत्रक पहले से ही UITableViewController है, तो जांचें कि आपने विधि viewWillAppear विधि का उपयोग किया है या नहीं। यदि आपने किया है, तो आपको 'स्वचालित व्यवहार' काम करने के लिए [super viewWillAppear:YES] पर कॉल करना होगा।

-(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:YES]; // This line is needed for the 'auto slide up' 
    // Do other stuff 
} 

यह समस्या आसानी से बदल जाता है क्योंकि नियंत्रकों के लिए बॉयलरप्लेट कोड viewWillAppear विधि कॉल के साथ नहीं आते हैं और यदि आप इसे अपने नियंत्रक में परिभाषित करते हैं, आप इसे ओवरराइड।

अतिरिक्त सूचना

इस लिंक पर देखो।

Apple Table View Programming Guide

नोट: UITableViewController आईओएस 3.0 में नई क्षमता है। तालिका-दृश्य नियंत्रक तालिका-दृश्य पंक्तियों के इनलाइन संपादन का समर्थन करता है; अगर, उदाहरण के लिए, पंक्तियों पाठ फ़ील्ड संपादन मोड में एम्बेडेड है, यह स्क्रॉल पंक्ति है कि दिखाया गया वर्चुअल कीबोर्ड .... blah ....

महत्वपूर्ण बिट ऊपर संपादित किया जा रहा

UITableViewController वर्ग अधिभावी loadView, viewWillAppear :, और अन्य तरीकों से पूर्वगामी व्यवहार UIViewController से विरासत में मिली लागू करता है। UITableViewController के अपने उप-वर्ग में, आप विशेष व्यवहार प्राप्त करने के लिए इन विधियों को ओवरराइड भी कर सकते हैं।यदि आप इन विधियों को ओवरराइड करते हैं, तो डिफ़ॉल्ट व्यवहार प्राप्त करने के लिए, विधि के कार्यान्वयन के लिए सुपरक्लास विधि को कार्यान्वित करना सुनिश्चित करें, आमतौर पर पहली विधि कॉल के रूप में।

+0

मुझे यह पोस्ट करने के कुछ देर बाद पता चला कि इसमें स्थैतिक तालिका से कोई लेना देना नहीं था। मैंने एक टेस्ट स्टैटिक टेबल बनाया और यह ठीक काम किया, इसलिए मुझे पता था कि यह मेरे कोड के साथ कुछ था। आप 100% सही थे। यह [सुपर व्यूविलपियर: हाँ] था; जैसे ही मैंने इसे अपने विचार में जोड़ा, विलपअपर ने काम किया। मुझे लगता है कि यह कैसे हटा दिया गया है। मैं इस सप्ताह फिक्सिंग पर डर रहा था और यह वास्तव में आसान साबित हुआ। धन्यवाद – Keith

+1

चीयर्स मैन। आपके प्रश्न ने मुझे दस्तावेज़ों की ओर इशारा किया और मैंने एक और gotcha =) –

+1

महान जवाब दिया, घृणित आप वोट अधिक नहीं था। वैसे भी एक है। –

0

दृश्य धक्का यदि तालिका रूपों में से एक संपादन के लिए चयनित (कुंजीपटल अधिसूचना कार्यान्वयन की आवश्यकता है) है

- (void) keyboardDidShow:(NSNotification *)aNotification 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.25]; 
    self.view.center = CGPointMake(self.view.center.x, self.view.center.y-moveAmount); 
    [UIView commitAnimations]; 
    isRaised = [NSNumber numberWithBool:YES]; 
} 

तालिका (2 से ऊंचाई बिताते हैं) आकार बदलता है। कीबोर्ड में इसे स्वैप करें विधि दिखाएं। साथ ही, आप कीबोर्ड को इस सामग्री को पूर्ववत करने के लिए छुपा विधि का उपयोग कर सकते हैं।

CGRect temp = CGRectMake(mineTable.frame.origin.x, mineTable.frame.origin.y, mineTable.frame.size.width, mineTable.frame.size.height/2); 
mineTable.frame = temp; 
+1

क्या यह पूरा उत्तर है? ऐसा लगता है कि कुछ चीजें गायब हैं। – Keith

+0

वैसे मैं आपको सामानों का एक समूह नहीं दिखाना चाहता था जिसे आप पहले ही जानते हैं कि कोड कैसे करें। मैंने आपको बताया था कि क्या करना है (कीबोर्ड अधिसूचनाएं लागू करें)। सही दिशा में आपको इंगित करने के लिए यह केवल कुछ उदाहरण कोड है। – Dustin

1

स्विफ्ट

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

}