2010-08-21 10 views
8

मैं आईआईएनएविगेशन बार के साथ आईपैड में एक पॉपओवर प्रदर्शित कर रहा हूं। दूसरे दृश्य पर, मेरे पास एक UISearchController है जो एक कीबोर्ड प्रदर्शित कर सकता है। कुंजीपटल पॉपओवर को धक्का देता है, जो ठीक है, हालांकि अगर मैं अब यूआईवीविगेशन बार पर 'बैक' बटन दबाता हूं तो यह ठीक से कीबोर्ड को खारिज कर देता है, लेकिन पॉपओवर अपनी मूल स्थिति में वापस स्लाइड नहीं करता है। किसी को पता है कि इसे कैसे ठीक किया जाए? धन्यवाद!यूआईपीओपीओवर नियंत्रक कुंजीपटल स्लाइड के बाद मूल स्थिति में नहीं जा रहा है

उत्तर

9

ठीक है तो मुझे वास्तव में पता चला (मेरा मानना ​​है कि आपका प्रश्न क्या पूछ रहा था ... और अगर किसी ने Google से इस पर ठोकर खाई, तो मुझे लगा कि मैं जवाब दूंगा कि मैंने यह कैसे किया। यह हैक नौकरी की तरह लगता है लेकिन मैं इसे करने का कोई और तरीका नहीं ढूंढ पाया।

नियंत्रक कि कुंजीपटल लाता में, मैं यह बारे में सूचना पोस्ट जब भी कुंजीपटल खारिज था:

[aTextField resignFirstResponder]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil]; 

फिर वापस अपने घर स्क्रीन नियंत्रक, कि UIPopover को नियंत्रित करता है, मैं एक श्रोता कहा:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(movePopUpToRightLocation) 
              name:@"movePopups" 
              object:nil];  

init के अंदर। अच्छा प्रोग्रामिंग अभ्यास के लिए अपने dealloc में श्रोता दूर करने के लिए याद करने के लिए सुनिश्चित करें: जब भी मैं सूचना है कि कुंजीपटल गायब हो जाता है मिलता है तो फिर

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

, मैं सिर्फ बटन के लिए एक संदर्भ है कि पॉपओवर में दिखाई दे रहा हो, और इसे से सीधे फिर से दिखाई देते हैं:

-(void)movePopUpToRightLocation { 
NSLog(@"move pop up to right location"); 
if (morePopUp) { 
    UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0]; 
    [morePopUp presentPopoverFromBarButtonItem:barButtonItem 
         permittedArrowDirections:UIPopoverArrowDirectionDown 
             animated:YES];    
} 

}

मैं नहीं जोड़े हैं चेकों जिसके लिए पॉपअप यह है, लेकिन मैं आसानी से कर सकते है कि अगर मैं पॉपओवर से अधिक 1 प्रकार है/बटन से यह दिखाई देगा। लेकिन यह मूल आधार है जिसे आप जा सकते हैं।

उम्मीद है कि यह मदद करता है!

+0

धन्यवाद पर ome बटन Hthe साथ लैंडस्केप अभिविन्यास में है! यह सुनिश्चित करने के लिए किसी के लिए यह सहायक है। – paranoidroid

1

आप प्रारंभकर्ता में कहीं UIKeyboardDidHideNotification के लिए भी पंजीकरण कर सकते हैं।

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil]; 

इस कोड पॉपओवर वापस ले जाता है:

- (void)movePopoverBack:(id)sender { 
    if ([self.settingsPopoverController isPopoverVisible]) { 
     [self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1]; 
     [self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5]; 
    } 
} 

- (void)hidePopover { 
    [self.settingsPopoverController dismissPopoverAnimated:YES]; 
} 

- (void)movePopoverBack { 
    [self.settingsPopoverController 
    presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton 
    permittedArrowDirections:UIPopoverArrowDirectionDown 
    animated:YES]; 
} 

मैं देरी के बिना काम यह नहीं मिला है, लेकिन इस मेरे वर्तमान परियोजना के लिए स्वीकार्य हो रहा है। उम्मीद है कि यह किसी की मदद करता है।

0

बैक बटन दबाए जाने के बाद आपको खोज क्षेत्र के लिए resignFirstResponder मैन्युअल रूप से कॉल करना चाहिए (उदाहरण के लिए viewDidDisappear के अंदर)।

यह आपकी मदद चाहिए, लेकिन समस्या अभी भी आईओएस 4 के तहत reproduced किया जाएगा जब डिवाइस बाईं ओर