1

我没有使用笔尖以编程方式创建了我的 ipad 代码。我将 ipad 应用程序转换为通用应用程序,如下所示:

选择项目目标(侧边栏上的蓝色目标)。摘要 -> iOS 应用程序目标 -> 将设备设置为通用。

现在我想为 iphone 启动不同的应用程序代理,为 ipad 启动不同的应用程序代理。ipad 已经有一个应用程序代理,现在我想为 iphone 创建不同的应用程序代理,以便在 main.m 中我可以启动不同的应用程序代理设备(ipad 和 iphone)。所以我的问题是,我可以创建不同的应用程序委托,如果是,那么如何?

4

3 回答 3

2

在项目中main.m

你可以做类似的事情

int main(int argc, char *argv[])
{
    @autoreleasepool {

        NSString *appDelegateName;
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
            appDelegateName =  NSStringFromClass([AppDelegateIPhone class]);
        } else {
            appDelegateName =  NSStringFromClass([AppDelegateIPad class]);
        }
        return UIApplicationMain(argc, argv, nil, appDelegateName);
    }
}

但IMO你不应该这样做。

而是像苹果那样做,在应用程序委托中加载不同的视图控制器或不同的 XIB。

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}



@end
于 2012-06-21T10:00:38.543 回答
0

您应该能够通过 XIB 为您的应用程序执行此操作。默认情况下,AppDelegate 由MainWindow.xib(或您的主 XIB 文件称为)的文件所有者和委托出口之间的连接分配。如果您使用了转换器,那么MainWindow~ipad.xib应​​该有一个类似的出口,目前也指向同一个委托。如果您希望它们有所不同,请创建一个新的 AppDelegate 子类并将其分配给~ipadXIB 版本中的插座,它应该等效于调用 UIApplicationMain 而无需手动执行此操作。

于 2012-06-21T10:05:34.380 回答
0

您甚至不必担心那里的“appDelegateName”变量。只需调用 return ,如下所示:

  int main(int argc, char *argv[])
  {
      @autoreleasepool {

          if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){
              return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate_iPad class]));
          } else {
              return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate_iPhone class]));
          }

       }
   }
于 2013-04-29T23:53:53.823 回答