2011-08-02 6 views
2

私はiPadアプリとiPhoneアプリを持っています。iPadとiPhoneアプリにどのように参加できますか?

私は、参加アプリがiPad上で動作するなら、それは行動を起こし、それがiPhone上で動くなら別のものを持つように彼らに加わりたいと思います。

iphone/ipadのビューを選択して別のビューを作成し、ipadとiphone(例:splitViewController)固有のものがいくつかあるので、別のビューを選択するだけでは表示されません助けて。

このようなアプリを2つ組み合わせるにはどうすればよいですか?

if(isIPhone) 
{ 
// code for iphone 

} 
else if(isIPad) 
{ 
// code for iPad 

} 

私は2つのバージョンの違いがあるたびに、より洗練された方法をお勧めします。ありがとう!

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
    // Do iPad specific stuff. 
} else { 
    // Do iPhone/iPod touch stuff here. 
} 
+1

これは私たちのほとんどがこれを行う方法であると想像しています。アプリを別々にリリースしない限り、これを達成するためのより良い方法は考えられません。 – Luke

答えて

5

WWDC 2010のセッションビデオには、この問題を正確にカバーするiPad開発の概要が含まれていると思います。

はここでAppleのガイダンスに従って、私が撮影したアプローチです:

あなたはあなたが同様にプラットフォーム固有のアプリデリゲートを設定することができることを意味しており、プラットフォーム固有のメインインターフェイスニブを設定することができます。だからあなたはおそらくあなたのアプリの設定をすべて行うスーパークラスのアプリケーションデリゲートを持っていて、それからサブクラスはiPadのUIかiPhoneのUIのどちらかをデプロイします。

これは、iPad上でスプリットビューに交通機関が必要なので、便利な機能です。これで、ビューコントローラとは独立したロジックをアプリケーションのデリゲートに配置することができます。

そこからは、両方のプラットフォームに共通のビューコントローラがありますが、それぞれに特定の動作がある場合はいつでも、すべての共通機能を処理するビューコントローラスーパークラスが作成されます。 iPad固有のサブクラスは、-refreshView:メソッドをオーバーライドして、追加のアニメーションを追加したり、プロパティを追加したり、スプリットビューをサポートするメソッドを委譲することができます。あなたは間違いなくif elseとiPadのネスをテストすることができますが、あなたがその問題だけで一つのプラットフォームデリゲートメソッドを追加するよう

、これはビューコントローラでが本当に危ない得ることができます。このように分割することで、保守や読み込みが非常に簡単なコードが得られます。これは、すべて既存のプロジェクトのリファクタリングを意味します。しかし、私の場合は約1時間しかかかりませんでした。その結果、1つまたは両方のプラットフォームにジャンプして変更するのが簡単な、きれいなアプリです。

+0

これは私が探していた答えです!これも私のアプローチです..ありがとう! – Alex

2

はこれですか?あなたがipadアプリケーションからiphoneアプリプロジェクトにすべてのソースファイルをコピーするのと同じように(あなたはsonmeの名前を変更する必要があるかもしれないので、重複したものはありません)...そして、あなたのアプリケーションデリゲートで、ipadとまたは必要なファイル

UITabbarcontrollerを使用するときは、単にiPad用またはiPhone用のrootviewsのいずれかでコントローラを設定することができ、これは、特に適しているが追加されますiphone ...

他のすべてのソースファイルが残ります同じ(上記の名前の変更を除いて)... ファイルサイズは非常に大きくなるでしょう。

SideSwipe

0

は、あなただけの1つのアプリでファイルを一緒に参加できない:あなたが探しているものを

+0

Sry、私はXenElementsの答えをコピーするつもりはなかった、私はまったく同じ時間に私が書いた。 – SideSwipe

1

XCode 4では、少なくともターゲットごとにコンパイルするコードを設定し、残りのコードはすべて無視することができます。だから理論的には、あなたはiPhoneアプリにすべてのあなたのiPadアプリをコピーして、それぞれが自分のリソースとコードだけを参照するようにすることができます。実行する可能性のある唯一の問題は、名前の競合ですが、グループやフォルダーを使用してこれを回避することができます。

あなたはすでに両方をビルドしているので、これは最も簡単な方法のようです。この方法の欠点は、コード内のバグを修正する必要がありますが、ユーザーはiPhoneとiPadで同じアプリを使用できることです。

EDIT:

BUILD_PHASES > COPY_BUNDLE_RESOURCES & BUILD_PHASES > COMPILE SOURCES

0

を参照してくださいあなたはおそらくここでのXcode 4でのユニバーサルアプリにそれを回す試みることができるユニバーサルアプリを構築するための私の方法で私を得た短いイントロへのリンクです。

Universal Apps

0

その非常にシンプル。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 

    // Do iPad stuff 

    } else { 

    // Do iPhone stuff 

    } 

ただし、条件内にペン先名をロードするときは注意してください。 iPadとiPhone用の.xibを別々にデザインしなければならないことをご存じでしょうか。

関連する問題