ランドスケープ モードでのみ表示できるようにしたい iPad 3 アプリがあります。いくつかの UIViewContoller サブクラスがあり (これは非常に単純なアプリです)、それらすべてに次のコードがあります。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight;
}
コードは大きくありませんが、重複しています。Objective-C でこれを回避する方法を学びたいと思います。カテゴリと、それらが適用されるクラス/インスタンスからメソッドをオーバーライドする方法について読んだので、試してみることにしました。Xcode ウィザードを使用して UIViewController クラスの LandscapeOnly カテゴリを作成し、上記の実装をそれに移動しましたが、役に立ちませんでした。ヘッダー ファイルにメソッド シグネチャを追加しようとしましたが、これも何も変わりませんでした。
これはどのように行われますか?カテゴリを使用してインスタンス メソッドをオーバーライドするにはどうすればよいですか?
ここで別の質問で、カテゴリとメソッドのオーバーライドは推奨されないことを読んだので、ずっと間違っているのではないでしょうか? 私が達成したいことを達成する標準的な方法は何ですか? カスタムの UIViewController サブクラスを使用して、他のすべてのコントローラーをそこから派生させることができますが、これは、異なる要件を持つコントローラー、つまり複数の基本クラスを持つとすぐに機能しなくなります。たとえば、他の言語では mixin を使用しますが、Objective-c のカテゴリはそれに相当すると思いますか?