2011-12-07 13 views
10

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

Ps: मेनू जहां uiwebview स्थित है, पहले मॉड्यूल प्रस्तुत किया गया था।

+0

आपकी समस्या का समाधान मिला है, क्या आप इसे हमारे साथ साझा कर सकते हैं? – Illep

+0

अभी तक नहीं मिला ... मुझे यह नहीं मिला है – jonypz

उत्तर

8

यूट्यूब प्लग-इन प्लेयर स्वयं एक मोडल व्यू कंट्रोलर है। जब यह बटन दबाया जाता है तो यह presentingViewController पर लौट रहा है। इसका presentingViewController आपका मोडल व्यू कंट्रोलर नहीं है बल्कि इसके बजाय व्यू कंट्रोलर है जिसे आपके मोडल व्यू कंट्रोलर को प्रस्तुत करने के लिए [presentModalViewController:animated:] कहा जाता है। चूंकि मूल मोडल व्यू कंट्रोलर अभी भी सक्रिय है, ऐप बुरी तरह व्यवहार करता है।

समस्या को ठीक करने के लिए,

1) ट्रैक मोडल दृश्य नियंत्रक प्रस्तुत किया गया है कि क्या लेकिन खारिज नहीं किया।

2) प्रस्तुति दृश्य नियंत्रक की viewDidAppear विधि में, यदि मोडल व्यू कंट्रोलर प्रस्तुत किया गया था और इसे खारिज नहीं किया गया था, तो इसे खारिज कर दें और इसे फिर से प्रस्तुत करें।

उदाहरण के लिए, नियंत्रक कि मोडल वेब दृश्य नियंत्रक प्रस्तुत कर रहा है में:

- (void) presentModalWebViewController:(BOOL) animated { 
     // Create webViewController here. 
     [self presentModalViewController:webViewController animated:animated]; 
     self.modalWebViewPresented = YES; 
    } 

    - (void) dismissModalWebViewController:(BOOL) animated { 
     self.modalWebViewPresented = NO; 
     [self dismissModalViewControllerAnimated:animated]; 
    } 

    - (void) viewDidAppear:(BOOL)animated { 
     [super viewDidAppear:animated]; 
     if (self.modalWebViewPresented) { 
      // Note: iOS thinks the previous modal view controller is displayed. 
      // It must be dismissed first before a new one can be displayed. 
      // No animation is needed as the YouTube plugin already provides some. 
      [self dismissModalWebViewController:NO]; 
      [self presentModalWebViewController:NO]; 
     } 
    } 
+1

यह मेथोड केवल तभी काम करता है जब आप VIEWDIDAPPEAR में वेबव्यू कंट्रोलर को विघटित करते हैं और मेरे मामले में, यदि मैं इसे VIEWWILLAPPEAR में करता हूं तो यह क्रैश हो जाता है। इसके साथ सावधान रहें। टिप – Vassily

+0

के लिए धन्यवाद यह बहुत अच्छा काम करता है, धन्यवाद। क्या कोई जानता है कि हमें इसे पहले स्थान पर क्यों करना है? क्या यह UIKit में एक बग है, या क्या कुछ ऐसा है जो मैं मोडल व्यू कंट्रोलर के बारे में गलतफहमी कर रहा हूं? – Defragged

+2

इस मामले में UIWebView को सामान्य रूप से प्रस्तुत किया गया है और इसके ऊपर प्रस्तुत यू ट्यूब प्लग-इन को भी सामान्य रूप से प्रस्तुत किया जाता है। तो हमारे पास एक मोडल व्यू कंट्रोलर पेश करने वाला एक मोडल व्यू कंट्रोलर है।UIKit अपेक्षा करता है कि केवल एक ही मोडल व्यू कंट्रोलर प्रस्तुत किया गया हो और जब शीर्ष पर खारिज कर दिया जाता है तो इसके नीचे वाले लोगों को भी खारिज कर दिया जाता है। जब ऐसा होता है तो बेस व्यू कंट्रोलर को viewDidAppear के साथ बुलाया जाता है: और हमें फिर से हमारे मोडल व्यू कंट्रोलर का प्रतिनिधित्व करने का मौका देता है। क्या यह एक बग है? हो सकता है लेकिन शायद यह एक डिज़ाइन निर्णय है जिसे ऐप्पल ने बनाया है कि हमें आसपास काम करना है। – lambmj

2

यह धागा बहुत उपयोगी है और इस समस्या को खोजने के लिए मेरी मदद करो!

लैम्बम का उत्तर ठीक काम करता है, लेकिन मुझे एक बेहतर तरीका मिला। दृश्य नियंत्रक पेश में:

- (void)viewDidAppear:(BOOL)animated { 
     [super viewDidAppear:animated]; 
     if (self.presentedViewController) { 
      UIViewController *vc = self.presentedViewController; 
      [vc dismissModalViewControllerAnimated:NO]; 
      [self presentModalViewController:vc 
            animated:NO]; 
     } 
    } 

आशा इस मदद करता है!

0

@Gdx वू @lambmj

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

इस पर आधारित, मैं अत्यधिक @IsaacCisneros की विधि की अनुशंसा करता हूं जो निर्बाध रूप से स्विच करेगा।

0

बस पूर्ण स्क्रीन में प्रवेश करते समय UIWebView को हटा दें; पूर्ण स्क्रीन से बाहर निकलने पर UIWebView वापस जोड़ें। UIWebView के सबव्यू के साथ UIViewController को मानने के नीचे नमूना कोड, और आपके UIWebView में यूट्यूब आईफ्रेम होना चाहिए।

- (void)viewDidAppear:(BOOL)animated { 

[super viewDidAppear:animated]; 
// Add observer for "Done" button click 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerWillExitFullscreen:) 
              name:@"UIMoviePlayerControllerWillExitFullscreenNotification" 
              object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerDidEnterFullscreen:) 
              name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" 
              object:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated { 

// Remove observers for "Done" button click 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil]; 
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil]; 

} 

- (void)playerWillExitFullscreen:(NSNotification *)notification { 

// Before exit full screen, add back UIWebView that have been removed earlier 
[self.view addSubview:self.webView]; 
} 

- (void)playerDidEnterFullscreen:(NSNotification *)notification { 

if (self.presentingViewController) { // UIWebView is presenting the build-in movie player controller 
    [self.webView removeFromSuperview]; // Built-in movie player controller is already entering full screen mode 
} 
}