2011-12-07 30 views
10

Tôi có một uiwebview phát video youtube. Làm thế nào tôi có thể xử lý các hành động nút thực hiện? Ngay bây giờ, khi tôi nhấn vào nút xong, nó sẽ chuyển về menu chính của ứng dụng của tôi (không phải trình đơn được cho là sẽ loại bỏ) và nó chỉ bị đóng băng. Có ai có thể giúp tôi không?phát video youtube bên trong uiwebview. Làm cách nào để xử lý nút "xong"?

Ps: trình đơn chứa vị trí uiwebview, trước đây được trình bày một cách bình thường.

+0

Đã tìm thấy giải pháp cho vấn đề của bạn, bạn có thể chia sẻ giải pháp với chúng tôi không? – Illep

+0

chưa ... Tôi chưa tìm thấy nó – jonypz

Trả lời

8

Trình phát trình cắm của YouTube chính là bộ điều khiển chế độ xem phương thức. Nó quay trở lại presentingViewController khi nhấn nút xong. presentingViewController của nó không phải là bộ điều khiển xem phương thức nhưng thay vào đó là viewController được gọi là [presentModalViewController:animated:] để trình bày bộ điều khiển chế độ xem phương thức của bạn. Vì bộ điều khiển chế độ xem ban đầu vẫn hoạt động, ứng dụng hoạt động kém.

Để khắc phục vấn đề này,

1) Theo dõi việc điều khiển xem phương thức đã được trình bày nhưng không bị sa thải.

2) Trong phương thức viewDidAppear của bộ điều khiển xem trình bày, nếu trình điều khiển chế độ xem được trình bày và không được loại bỏ, loại bỏ và trình bày lại.

Ví dụ, trong bộ điều khiển được trình bày điều khiển xem web modal:

- (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

Methode này hoạt động CHỈ nếu bạn dissmiss các webviewController trong VIEWDIDAPPEAR và trong trường hợp của tôi, nó bị treo nếu tôi làm điều đó trong VIEWWILLAPPEAR. Hãy cẩn thận với điều đó. cảm ơn cho các tip – Vassily

+0

Điều đó hoạt động tuyệt vời, cảm ơn bạn. Có ai biết tại sao chúng ta phải làm điều này ngay từ đầu? Nó có phải là một lỗi trong UIKit, hay có điều gì đó tôi hiểu lầm về các bộ điều khiển xem phương thức? – Defragged

+2

Trong trường hợp này UIWebView được trình bày một cách bình thường và trình cắm thêm You Tube được trình bày trên đầu trang của nó cũng được trình bày một cách bình thường. Vì vậy, chúng tôi có một bộ điều khiển xem phương thức trình bày một bộ điều khiển xem phương thức.UIKit hy vọng rằng chỉ có một trình điều khiển chế độ xem đơn được trình bày và khi trình điều khiển trên cùng bị loại bỏ thì bên dưới cũng bị loại bỏ. Khi điều đó xảy ra, bộ điều khiển khung nhìn cơ bản sẽ được gọi với viewDidAppear: và cho chúng ta một cơ hội để đại diện cho bộ điều khiển xem phương thức của chúng ta một lần nữa. Nó là một lỗi? Có lẽ nhưng có lẽ đó là một quyết định thiết kế mà Apple đã làm cho chúng ta phải làm việc xung quanh. – lambmj

2

chủ đề này là rất hữu ích và giúp tôi tìm ra vấn đề!

Câu trả lời của lambmj hoạt động tốt, nhưng tôi đã tìm thấy một cách tốt hơn. Khi trình bày bộ điều khiển chế độ xem:

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

Hy vọng điều này sẽ hữu ích!

0

@Gdx Wu @lambmj

Nhờ các phương pháp của bạn, họ làm việc tốt. Nhưng có một số vấn đề nhỏ sau khi nhấp vào nút thực hiện & nhảy trực tiếp đến bộ điều khiển xem trình bày, chúng ta cần loại bỏ trình điều khiển chế độ xem được trình bày và trình bày lại, điều này sẽ mang lại sự hoà sắc (như flash) giữa các công tắc điều khiển chế độ xem này.

Dựa trên điều này, tôi khuyên bạn nên sử dụng phương pháp @IsaacCisneros sẽ chuyển đổi liền mạch.

0

Chỉ cần xóa UIWebView khi nó chuyển sang chế độ toàn màn hình; thêm lại UIWebView khi thoát khỏi chế độ toàn màn hình. Mã mẫu bên dưới giả định UIViewController với chế độ xem phụ của UIWebView và UIWebView của bạn phải có khung nội tuyến youtube.

- (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 
} 
} 
Các vấn đề liên quan