0

プロトコルに問題があります。私はこのようなクラスを持っています:

@class SideToolBarDelegate;
@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate,SideToolBarDelegate> {
}
...

私のクラス" AuthentificationViewController"はプロトコル""に準拠しSideToolBarDelegate、iPhoneバージョンに準拠し、iPadバージョンには準拠しないようにしたいと思います。どうすればこれを宣言できますか?ありがとう。

4

3 に答える 3

2

プロジェクトのプロパティでいくつかの定義を設定し、ifdefを使用できます。好き:

@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate
#ifdef IPAD
,SideToolBarDelegate>
#else
>
#endif

しかし、これは古いCの方法です。オブジェクト指向アプリケーション設計に準拠したプログラムでこれを行うことは非常に悪い考えです。この場合、さらに2つの方法があります。

  1. iPhoneとiPad用に別々のサブクラスを作成する
  2. これをそのまま1つのクラスにし、iPhoneのSideToolBarDelegateメソッドを使用しないでください。これにより、コードが明確になり、将来的に維持しやすくなります。

結局のところ、viewControllers用に2つのクラスを作成することをお勧めします。

AuthentificationiPadViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate>
AuthentificationiPhoneViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate, SideToolBarDelegate>

コードの将来のデバッグについて考えてみてください。

于 2012-09-25T15:48:22.477 に答える
0

ユニバーサルアプリを作成しなかった場合は、コンパイル時にiPadかiPhoneかを判断するために、いくつかのプリプロセッサマクロを定義できます。

#define IS_IPAD   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

そして、次のようなことをします

#if IS_IPHONE

@class SideToolBarDelegate;
@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate,SideToolBarDelegate> {
}

#else

@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate> {
}

#endif

ユニバーサルアプリを作成した場合(これはあなたの場合のように聞こえます)、これはコンパイル時に決定できません。実行時に実行する必要があります。

だとしたら。前述の@pro_metedorのように、iPhoneとiPad用に別々のビューを作成することをお勧めします。

于 2012-09-25T15:47:46.627 に答える
0

それは本当に必要です:

  1. iPhoneアプリとiPadアプリに別々のビルドターゲットを作成できます
  2. [アプリ]-iPadターゲットをアクティブターゲットとして選択した状態で、[プロジェクト]->[アクティブターゲットの編集][アプリ]-iPadを選択します。「cflags」を検索してダブルクリックします。「-DTARGET_IPAD」のフラグを追加します。これで、シンボルTARGET_IPADがiPadターゲットに対してのみ定義されます(ここから取得)。
  3. コードを次のように変更します。

@class SideToolBarDelegate;

@interface AuthentificationViewController : UIViewController <
    ASIHTTPRequestDelegate,
    UITextFieldDelegate
#ifdef TARGET_IPAD 
    ,SideToolBarDelegate
#endif
>
{
}
于 2012-09-25T15:58:26.797 に答える