1

編集 質問を簡単にしましょう: アプリケーションに、ホーム ビューと 3 つのタブを持つタブ付きビューの 2 つのビューがあるとします。ホーム ビューには、「Tab1」、「Tab2」、「Tab3」という 3 つの標準ボタンがあります。「Tab1」をクリックすると、タブ 1 が選択された状態でタブ ビューが開き、Tab2 と Tab3 についても同様です。

ヒントはありますか?
/編集

私がやろうとしていること: iPhone アプリが初期化されると、1 つのボタンでビューが表示されます。このボタンをクリックすると、タブ付きビューに移動するはずです。

私がやっている方法とそれが機能していない (キャッチされない例外を取得する): ビューベースのテンプレートからプロジェクトを作成することから始めました。自動作成されたビュー コントローラーで、TabbedViewController という別のビュー コントローラーを宣言しました。ヘッダーファイルは次のとおりです。

#import <UIKit/UIKit.h>

@class TabbedViewController;

@interface DZBluePagesViewController : UIViewController {
    TabbedViewController *tabbedViewController;
}

@property (nonatomic, retain) TabbedViewController *tabbedViewController;

-(IBAction)goToTabbedView:(id)sender;

@end

という名前の xib を作成しTabbedView、ファイル所有者のクラス ID を TabbedViewController に設定しました。Tab Bar Controller もドラッグしました。

ホーム ビューにボタンを追加しました。メイン ビュー コントローラー ファイルでボタンに関連付けたアクションは次のとおりです。

- (void)viewDidLoad {

    TabbedViewController *tvc = [[TabbedViewController alloc] 
                                 initWithNibName:@"TabbedView" bundle:nil];
    self.tabbedViewController = tvc;
    [tvc release];

    [super viewDidLoad];
}



-(IBAction)goToTabbedView:(id)sender {
//  [self.view removeFromSuperview];
    [self.view insertSubview:tabbedViewController.view atIndex:0];
}

insertSubview 呼び出しでキャッチされない例外が発生しています...これまでにマルチビュー アプリで 3 つまたは 4 つのチュートリアル (iPhone Development - Mark and LaMarche - book から) を実行しましたが、誰もいなくても 1 つのチュートリアルを実行する準備ができていると思いました。私の手を握って...明らかに間違っています。誰でも助けることができますか?

4

4 に答える 4

1

簡単な質問に答えるには

ホームビューとタブバービューの両方のスーパービューになるには、3番目の「ルート」ビューとビューコントローラーが必要だと思います。

アプリが起動すると、ルート ビューはホーム ビューのコンテンツを読み込みます。次の行を使用して、ルート ビュー コントローラー内でこれを行うことができます。

homeViewController.view.frame = self.view.bounds;
[self.view addSubview:homeViewController.view];

次に、タブ バー ビューに切り替えたい場合は、次のようにします。

[homeViewController.view removeFromSuperview];
tabBarViewController.view.frame = self.view.bounds;
[self.view addSubview:tabBarViewController.view];

注意点があります。viewWillAppear:、viewDidAppear: メソッドは、自分で呼び出さない限り呼び出されないため、適切な場所にも挿入する必要があります。

Ben Gottlieb が示唆するように、UINavigationController をルート ビューとして使用する方が簡単な場合があります。(私が使用してきた意味でのルートを意味します。ナビゲーション コントローラーのルート ビューがホーム ビューになります。)次に、上記のコードの代わりに、pushViewController: メソッドを呼び出して、tabBarViewController をスライドさせます。これを行うには、UINavigationController をカスタマイズしてナビゲーション バーを非表示にする必要があります。おそらくそれは望ましくないためです。また、Apple は実際にはナビゲーション ビュー階層内にタブ バーを配置することを推奨していません。

例外について

投稿したコードは、投稿した例外とは何の関係もないようです。スローされた例外にグローバル ブレークポイントを設定する手順については、このブログ投稿を参照してください。そうすれば、デバッガーを使用して、自分のプログラムで問題のあるコード行が何であるかを把握できます。

于 2010-01-06T18:17:31.153 に答える
0

UINavigationController を使用し、ボタンを選択したら tabController をプッシュすることをお勧めします。スライド アニメーションが必要ない場合は、animate: 引数に NO を渡します。

于 2010-01-06T18:02:10.567 に答える
0

余分なメニュー ビューがあるのはなぜですか? タブビューを独自のビューとして使用し、ユーザーが選択したいタブを選択できるようにしないのはなぜですか? メニューなしでタブバーインターフェイスがそれを行うときに、特定のタブを開くだけのメニューが必要な理由がわかりません...

于 2010-01-06T18:29:43.310 に答える
0

例外が発生したら、実行コンソール (shift-command-R) を開きます。それを投稿してください。コンソールを開いて、プロンプトで「バック トレース」を表す「bt」と入力することもできます。

例外を投稿します。

于 2010-01-02T07:47:05.013 に答える