0

と呼ぶカスタム ナビゲーション コントローラを作成しましたCatalogueNavigationController。これには、タイプのCatalogueNavigationControllerと呼ばれるプロパティがあります。currentLevelint

CatalogueNavigationControllerこのナビゲーション コントローラー内に表示されるビュー コントローラーの 1 つで、のcurrentLevel値を取得したいと考えています。ただし、 で参照しようとすると、 currentLevel が のプロパティではないことself.navigationController.currentLevelを示唆するエラーに直面します。UINavigationControllerCatalogueNavigationController

CatalogNavigationController

// .h
@interface CatalogueNavigationController : UINavigationController
@property int currentLevel;

// .m
@implementation CatalogueNavigationController
@synthesize currentLevel;

ビューコントローラーの初期化

CatalogueBrowser *catalogue = [[CatalogueBrowser alloc] initWithStyle:UITableViewStyleGrouped andQuery:nil];
CatalogueNavigationController *navigation = [[CatalogueNavigationController alloc] initWithRootViewController:catalogue];
navigation.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:navigation animated:YES];

CatalogBrowser ビュー コントローラ

NSLog(@"%i",self.navigationController.currentLevel); //ERROR: Property 'currentLevel' not found on object of type 'UINavigationController *'

currentLevel 変数は、viewController がポップされるとデクリメントされ、viewController がプッシュされるとインクリメントされるため、ユーザーのナビゲーションの「深さ」を追跡できます。だから私はそれを現在の状態に戻す必要があります。

通知を使用してビュー コントローラーと CatalogueNavigationController の変数を組み合わせることができますが、もっと洗練された解決策があるのでしょうか?

self.navigationController を参照して の値を返すにはどうすればよいですか? ただし、UINavigationControllercurrentLevelではなく を参照するにはどうすればCatalogueNavigationControllerよいですか?

4

2 に答える 2

1

最善の解決策は、navigationController が必要なタイプであるかどうかをテストすることだと思います。. true の場合は、それをオブジェクトにキャストしてから、必要な値を確認します。

オブジェクトのキャストに関する情報: ios カスタム NSObject キャスト

それが役に立てば幸い!

于 2012-06-22T15:00:08.067 に答える