0

「クラシック nib ベース」と「ストーリーボード」ベースの iPhone 開発ワークフローの違いと、それぞれのコーディング スタイルとアプローチを学ぼうとしています。

そこで、iOS -> アプリケーション -> SingleView アプリケーションをテンプレートとして使用して、XCode 4.5 で新しい空の iPhone アプリを作成しました。これを、ルート コントローラーおよびアプリケーションのルート ビューとしてタブ バー コントローラーを使用するアプリに変換する方法を理解したいと考えています。

iPhone nib の空のルート ビューを削除し、そのビューを TabBarController のビューに置き換えようとしました。

ここに画像の説明を入力

実行時にこの例外が発生し、アプリが中止されます。

"A view can only be associated with at most one view controller at a time"

明らかに、私はここでルールを破っており、ビューに関連付けられた TabBarController を持ち、そのビューをファイルの所有者接続が指すビューにもすることは許可されていません。では、これを行うための通常の慣用的な方法は何ですか? 元の空のビューをそのままにして、実行時に tabbarcontroller ビューをサブビューにしますか? それとも他のテクニック?

注: 別のテンプレートの選択を求めているわけではありません。また、ストーリーボードが含まれる場合にこれを最も簡単に行う方法を求めているわけでもありません。ストーリーボードなしで、従来のペン先のみを使用してこれを行う方法を尋ねています。ペン先でインスタンス化された「ストック ui タブ コントローラー」オブジェクトがどのように機能するかを理解したいと思います。

更新: デフォルトの template-generated-single-view-templates のビュー コントローラー オブジェクトを取り除くことで、エラーを取り除くことができます。これで、黒い空のウィンドウでリンクして実行され、ルート ビューが表示されないアプリができました。Interface Builder を使用して、IUTabBarController をアプリ デリゲートのプロパティに接続しようとしました。

@property (strong, nonatomic )IBOutlet UIViewController *viewController; // I added IBOutlet

そして私のアプリデリゲートで:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _window.rootViewController = _viewController;
}

次に、そのアウトレットを nib でインスタンス化された UITabBarController オブジェクトに接続しました。

ここに画像の説明を入力

これはうまくいくはずだと私には思えました。実行できますが、ルート ビューがありません。

4

1 に答える 1

0

タイトルの質問は簡単に答えられます。タブ ベースのユーザー インターフェイス用の iOS テンプレートを選択し、[ストーリーボードを使用] のチェックを外します。

ただし、ここで自己回答しようとしている上記の根本的な質問は、新しいユーザーは、テンプレートを使用して「ストーリーボードを使用する」のチェックを外し、「タブ付きユーザー インターフェイス」を選択した場合に XCode が生成するボイラープレート コードを理解する必要があるということです。自分で書くには十分です。

私の問題は、View Controller クラスの関係とそれらがどのようにインスタンス化されるかを理解していなかったことと、appcontroller.m ファイルのボイラープレート コードを見落としていたことです。目の前に置いていたのに見えなかった。

  1. ページごとにView Controllerクラスを作成します。

  2. Apple のデモでは UITabBarController サブビューを直接使用せず、実行時に空白の nib ビューにペアレント化します。

     [self.window addSubview:self.tabs.view];
    

もちろんリンゴのサンプルはiOS 4.0時代のものです。

タブ バー コントローラーをルート UI ウィジェットとして使用する単純なアプリの参照用の優れたサンプル コード: Apple's Simple FTP Sampleただし、Apple のサンプルはタブ バー コントローラーのページごとに異なるニブを使用し、必要なため、完全なサンプルではありません。 iOS 3.0 時代のものであるため、ボイラープレート コードがさらに多くなります。

ただし、「現在のフレームワークを使用して、iOS 6.0 / 6.1時代にネイティブで期待されるイディオムは何ですか」という質問に答えていないため、この回答は完全ではありません。

于 2013-01-29T15:02:25.430 に答える