0

我对协议有疑问。我有这样的课:

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

我希望我的班级“ AuthentificationViewController”符合协议“ SideToolBarDelegate”只是我在 iPhone 版本中,而不是在 iPad 版本中符合它。我怎么能声明这个?谢谢。

4

3 回答 3

2

您可以在项目属性中设置一些定义并使用 ifdefs。喜欢:

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

但这是旧的 C 方式。在符合面向对象应用程序设计的程序中这样做是一个非常糟糕的主意。在这种情况下,您还有另外两种方法:

  1. 为 iPhone 和 iPad 创建单独的子类
  2. 按原样制作这一类,不要使用 iPhone 中的 SideToolBarDelegate 方法。这使代码更清晰,并且在将来更好地维护。

毕竟我建议为 viewControllers 创建两个类:

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

想想未来对代码的调试吧!

于 2012-09-25T15:48:22.477 回答
0

真的很需要:

  1. 您可以为 iPhone 和 iPad 应用程序创建单独的构建目标
  2. 选择 [app]-iPad 目标作为活动目标,选择 Project -> Edit Active Target [app]-iPad。搜索“c flags”并双击。为“-D TARGET_IPAD”添加一个标志。现在符号TARGET_IPAD将只为您的 iPad 目标定义(从这里抓取)。
  3. 将您的代码更改为:

@class SideToolBarDelegate;

@interface AuthentificationViewController : UIViewController <
    ASIHTTPRequestDelegate,
    UITextFieldDelegate
#ifdef TARGET_IPAD 
    ,SideToolBarDelegate
#endif
>
{
}
于 2012-09-25T15:58:26.797 回答
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 回答