2011-12-13 8 views
0

申し訳イメージを持つ別のビューをロードするために、私は数日間、この上で立ち往生されており、他のすべての助けを使い果たしてしまいました。UISegmentedコントローラは、1つのいくつかのYouTubeのUIWebViewsとビューと長い質問に対して

現在、私は4つのタブを持つタブバーアプリケーションを持っています。 2番目のタブ(SecondViewController)では、上部に「ビデオ」と「イメージ」を切り替えるセグメント化されたコントローラがあります。動画ページには、コードhereを使用してUIWebViewに読み込まれた約5本のYouTube動画が必要です。画像ビューには約5つのサムネイルが含まれている必要があります。クリックすると大きな画像が開きます。私の問題は、私がこれを達成するためのさまざまな方法を試してみたことです。私がここで探している主なものは、セグメント化されたコントローラを使用して2つのビューを切り替えること、および異なるファイル(videosView.h/mおよびimagesView.h/m)からビューを読み込むことが可能な場合の推奨方法です。

SecondViewController.mでは、これが正しいかどうかはわかりませんが、私はアプリを次の方法でUISegmentedControllerに応答させています。 videosView.hで

- (IBAction)segmentedControlChanged 

{ 
    switch (segmentedControl.selectedSegmentIndex) 
    {case 0: 
      [self.view addSubview:videosView.view]; 
      [imagesView.view removeFromSuperview]; 
      NSLog(@"1"); 
      break; 
    case 1: 
      [self.view addSubview:imagesView.view]; 
      [videosView.view removeFromSuperview]; 
      NSLog(@"2"); 
      break; 
    default: 
      break; 
    } 
} 

、私は次のことを持っている:私はinitWithFrameライン上の警告を取得していますけれども

videosView.mで
#import <UIKit/UIKit.h> 

@interface videosView : UIWebView 
{ 
} 

- (videosView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame; 

@end 

、私は、次のことを持っています。

- (videosView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame; 
{ 
    if (self = [super init]) 
    { 
     // Create webview with requested frame size 
    self = [[UIWebView alloc] initWithFrame:frame]; 

     // HTML to embed YouTube video 
     NSString *youTubeVideoHTML = @"<html><head>\ 
     <body style=\"margin:0\">\ 
     <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
     width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
     </body></html>"; 

     // Populate HTML with the URL and requested frame size 
     NSString *html = [NSString stringWithFormat:youTubeVideoHTML, urlString, frame.size.width, frame.size.height]; 

     // Load the html into the webview 
     [self loadHTMLString:html baseURL:nil]; 
    } 
    return self; 

} 

@end 

imagesViewは行われませんが、私はちょうどビデオが最初に整理取得しようとしていますよう一切は、現在のコードにそれを追加しました。

答えて

0

私の推薦:

  1. 使用1つのビューコントローラとビューコントローラは、両方のビューが含まれています。あなたはすでにそれをやっています。
  2. 別々のファイル(サブクラスUIView)を引き続き使用できます。
  3. addSubview:と​​は使用しないでください。これらの「コンテナ」ビューは、適宜hiddenと設定してください。
  4. また、segmentedControlChanged方法では、こうしたオープンなURLの接続を解除するなど、他のすべての必要なスイッチング作業を、行うなど
  5. viewDidLoadではなく、初期化子内のコンテナビューのWebコンテンツの初期化を行います。 UIをフリーズしないで、非同期ロードを使用するようにしてください。

EDIT:サブクラス化コードを追加します。 SecondViewController.hで

:SecondViewController.m

#include VideosView.h  
... 
@property (nonatomic, retain) VideosView *videoView; 

-(void)viewDidLoad { 
    self.videosView = [[VideosView alloc] init]; 
    // add to superview etc. 
} 

あなたはちょうどあなたがVideosView.hで定義したメソッドを呼び出すとで実装し、ビューの特定のコードを実行したいとき。 m。

[self.videosView playVideo]; 
+0

1.私はSecondViewController.hのUIView * videosViewを定義することをお勧めしますか? 2.私はこれをあなたの最初の推薦とどのようにリンクしますか? 3.これについてはどうすればいいですか? 4.これは私が最初に聞いたことですが、私はそれを試みようとします。 5.これが何を意味するのか完全に理解していません。あなたはおそらく言うことができるように は、私が経験豊富なプログラマはほど遠いよん、と私は得ることができるすべての助けに感謝します。 –

+0

1.はい。 2.角括弧で答える。 3. 'videoView.hidden =!videoView.hidden; photoView.hidden =!photoView.hidden; '4. OK。 5.それが言うことをしなさい。私は私のSecondViewControllerの実装でUIViewの* videosViewとのUIView * imagesViewを持っているので、もし – Mundi

+0

は大丈夫、どのように私は、これらのビューはvideosView.h /メートルからプロパティとvideosView.h /メートルを想定して作るのですか? –

関連する問題