Objective-C:使用 self.navigationController 和自定义 UINavigationController
Posted
技术标签:
【中文标题】Objective-C:使用 self.navigationController 和自定义 UINavigationController【英文标题】:Objective-C: Using self.navigationController with a Custom UINavigationController 【发布时间】:2012-06-22 14:43:59 【问题描述】:我创建了一个自定义导航控制器,我称之为CatalogueNavigationController
。这个CatalogueNavigationController
有一个名为currentLevel
的属性,它的类型是int
。
在此导航控制器中显示的我的一个视图控制器上,我想获得CatalogueNavigationController
的currentLevel
值。但是,当我尝试使用 self.navigationController.currentLevel
引用它时,我遇到了一个错误,提示 currentLevel 不是 UINavigationController
的属性 - 我知道,它是 CatalogueNavigationController
的一部分。
目录导航控制器
// .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];
目录浏览器视图控制器
NSLog(@"%i",self.navigationController.currentLevel); //ERROR: Property 'currentLevel' not found on object of type 'UINavigationController *'
currentLevel 变量在 viewController 弹出时递减,而在 viewController 被推送时递增,以允许我跟踪用户导航的“深度”。所以我需要返回它的当前状态。
我可以使用通知来结合我的视图控制器和 CatalogueNavigationController 上的变量,但肯定有更优雅的解决方案吗?
如何引用 self.navigationController 以返回 currentLevel
的值,但让它引用 CatalogueNavigationController
而不是 UINavigationController?
【问题讨论】:
【参考方案1】:我认为最好的解决方案是测试 navigationController 是否属于您想要的类型,这里解释为:In Objective-C, how do I test the object type?。如果它是真的,你将它转换为你的对象,然后检查你想要的值。
铸造对象信息:ios custom NSObject casting.
希望对你有帮助!
【讨论】:
为此干杯,但以这种方式进行转换将始终检索初始化版本,而不是当前实例。在我的 CatalogueNavigationController 中,我递增/递减 NSLog 正确输出的 currentLevel,使用此方法,它始终返回 0。【参考方案2】:我偶然发现了同样的情况。我认为解决方案是这样的:
CatalogueNavigationController *navController = (CatalogueNavigationController *)self.navigationcontroller;
NSLog(@"%i", navController.currentLevel);
【讨论】:
以上是关于Objective-C:使用 self.navigationController 和自定义 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章