簡體   English   中英

如何為iPhone 4英寸和iPhone 3.5英寸加載單獨的NIB文件?

[英]How to load Separate NIB Files for iPhone 4-inch and iPhone 3.5 inch?

如何為我的iPhone應用程序加載單獨的nib文件,檢查用戶是否有iPhone 5 / iPod Touch 4英寸屏幕而不是3.5英寸屏幕?

這是在init方法中完成的嗎?

詳細信息 - 我沒有在整個應用程序中使用故事板。 有一次我會使用故事板並從其中一個視圖控制器調用它。 (有沒有辦法區分故事板?)

  • 我正在尋找一個解決方案,在每個單獨的viewController中初始化...不是我會放在只運行一次的appdelegate中的東西。

  • Autolayout在我的許多情況下都不起作用。 設計非常圖形化,太多的空白區域讓事情看起來很糟糕。

我找到了辦法!

  • 我制作了單獨的nib文件,一個用於3.5英寸/ iPhone非視網膜,一個用於iPhone5
  • 我使用宏來檢查當前手機是否是iPhone 5格式。 (1)
  • 對於正常的initWithNibName:bundle:我寫了一個異常,以便它們不使用普通的初始化程序。 我把它命名為“錯誤的初始化程序”
  • 我為viewController創建了一個新的指定初始化程序,命名為initForFormat:
  • 我使用我的宏並檢查設備是否是iPhone 5。 如果它是iphone5,那么我使用nib名稱ViewControllerIphone5初始化

我從RayOfHope的https://stackoverflow.com/a/13068238/1492368獲得了這個宏

 #define HEIGHT_IPHONE_5 568
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )

所以在新的指定初始化器中initForLayout:我寫的

if(IS_IPHONE_5)
    {
        self=[super initWithNibName:@"DetailViewControlleriPhone5" bundle:nil];
    }
    else
    {
        self=[super initWithNibName:@"DetailViewController" bundle:nil];
    }

舊的初始化器

我從Big Nerd Ranch那里學到了這一點:在使用標准初始化程序時拋出異常

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

    @throw [NSException exceptionWithName:@"Wrong initializer"
                                   reason:@"Use initForLayout:"
                                 userInfo:nil];
    return nil;
}

從另一個ViewController / AppDelegate調用View Controller所以當我從另一個視圖Controller或appdelegate調用這個DetailViewController時,我寫道:

DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM