【发布时间】:2014-08-07 12:37:38
【问题描述】:
我正在尝试自定义应用程序导航栏的行为。我已经设法将UINavigationController 子类化为每次按下后退按钮时运行自定义代码,但导航栏标题仍然发生变化并且再次按下按钮会忽略我的代码(可能是因为它和整个不同的控制器?)。
我想要实现的是告诉UINavigationController 在某些条件下(已经定义并且来自自定义导航控制器的控制器)忽略对后退按钮的按下,从而保持当前视图和导航栏完好无损。
我怎样才能做到这一点?我只覆盖了 (UIViewController *)popViewControllerAnimated:(BOOL)animated 函数。
我的代码:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
if(self.auxController == nil)
{
NSLog(@"[CustomNavigationController.m]: WARNING: No Auxiliar Controller assigned to Navigation controller");
return [super popViewControllerAnimated:animated];
}
else
{
NSLog(@"[CustomNavigationController.m]: Navigation Stack has %d remaining levels",[[[self auxController] parentLayout] count]);
if([[[self auxController] parentLayout] count] > 0)
{
NSLog(@"[CustomNavigationController.m]: Falling to previous navigation level");
[[self auxController] navBack];
}
else
{
NSLog(@"[CustomNavigationController.m]: No more navigation levels in stack, falling to previous view");
self.auxController = nil;
return [super popViewControllerAnimated:animated];
}
}
return nil;
}
【问题讨论】:
-
为什么不隐藏按钮而不是禁用按钮
-
因为按钮在用户按下时会运行一些自定义代码,所以它需要可见。我不想隐藏或禁用它,只是以编程方式忽略按下然后运行一些代码
-
您可以创建一个自定义后退按钮(虽然看起来会略有不同)并将其作为左侧栏项
-
嗯,有一个选择。这个项目看起来略有不同并不重要,所以什么都没有丢失,但我仍然更喜欢更清洁的解决方案。如果没有出现,我会选择这个。谢谢
标签: ios objective-c uinavigationcontroller