[iOS SDK] LandscapeとPortraitで xib ファイルを切り替える方法

公開日: : iPad, iPhone

自分はたいていコードで位置指定するのでこれまで遭遇していなかったけれども Landscape と Portrait で xib ファイル自体を切り替えて対応する方法を調べたのでメモしてみる。

Landscape と Portrait で部品の配置などが大きく異なり、コードでの指定や AutoLayoutでの指定が面倒なときにこの方法を使うことになると思われる。

そもそも今はこういうxibを指定する書き方はしないという話もありそうだけれども。いまだに昔からの書き方でやっている。

iphone – Easiest way to support multiple orientations? How do I load a custom NIB when the application is in Landscape? – Stack Overflow

にある、下記のコードで対応できた。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    if( !nibNameOrNil )    {
		 nibNameOrNil = [self nibNameRotated:[[UIApplication sharedApplication] statusBarOrientation]];
	}
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    return self;
}

- (NSString*) nibNameRotated:(UIInterfaceOrientation)orientation
{
    if( UIInterfaceOrientationIsLandscape(orientation))  {   
		return [NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])];
	} else {
	    return [NSString stringWithFormat:@"%@", NSStringFromClass([self class])];
	}
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    NSString *nibname = [self nibNameRotated:toInterfaceOrientation];
    [[NSBundle mainBundle] loadNibNamed:nibname owner:self options:nil];
    [self viewDidLoad];
}

呼び出し側は

    xxxViewController *viewC = [[xxxViewController alloc]initWithNibName:nil bundle:nil];

のように、引数 nil で呼び出すことを想定している。
また、Landscape 用の xib ファイルは xxxViewController-landscape.xib とする。

基本的にはAdam氏の方法で対応できるのだが、最初からLandscape状態で呼び出されたときにwillRotateToInterfaceOrientation: が呼ばるまで Portrait状態になってしまうのでinitWithNibName: の対応が必要となりました。

関連記事

no image

[iOS SDK本] Beginning iOS 5 Games Development

久しぶりにApress本を購入。 Beginning iOS 5 Games Developmen

記事を読む

LogLocations 1.3.2 をリリースしました

LogLocations 1.3.2をリリースしました。審査後、近日中に公開されます。下記のレビュー

記事を読む

no image

iPhone開発のネタ帳: sonsongithub の PopupView を使ってみた

自作アプリで sonson 氏の PopupView を使わせていただいてます。 Softwar

記事を読む

[iOS開発本] よくわかる Auto Layout

あまりにも Auto Layout がわかりにくいので、業を煮やして開発本を買ってしまった。「よくわ

記事を読む

EverLearnのURLスキーム

EverLearn の URL スキームをちゃんと公開していなかったので公開しました。EverLea

記事を読む

no image

EDAMTimestamp と NSDate の相互変換

Evernote SDKを使ったアプリで EDAMTimestamp を DBに格納する前に NSD

記事を読む

no image

自作アプリを売り買いできる Apptopia

Apptopia というところからメールが来たので調べてみたところ、どうやらAndroid

記事を読む

no image

「サンプルプログラムでマスターする iPhone SDK」 の感想

2009年9月に発売された本。 iPhone SDK 3.0 リリース後に書かれた本なので、3.

記事を読む

ようやくAppStore に Submit

@ITの 日本人がつまずかないためのiPhone開発ポイント を読みながらAppStoreにアプリ公

記事を読む

au で iPhone5 を下取りに出してきた

今ならiPhone 5を32000で買い取りしてもらえるということで、au Shop に行っ

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

TORRAS iPhone 16 Pro Max用ケース

自分はiPhoneはケースを付けない派で、iPhone 12

iPhone 16 Pro Max 購入

iPhone 16 Pro Max 256GB 189000

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

→もっと見る

PAGE TOP ↑