gpt4 book ai didi

iphone - 捕捉 UINavigationController native 后退按钮操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:56 24 4
gpt4 key购买 nike

关于覆盖导航 Controller 的后退按钮操作有很多问题,但每个人都说没有直接的方法可以做到这一点。我通过继承 UINavigationController 并覆盖 UINavigationBarDelegate 方法实现了这一点。但问题是 UINavigationController 的接口(interface)没有实现 UINavigationBarDelegate 协议(protocol)(但它实现了这个方法,因为这段代码有效:),考虑到这里使用了未记录的 API,我担心该应用程序会被 Apple 拒绝。

那么,问题是:您如何看待是否使用私有(private) API?这是代码:

@interface CustomNavigationController : UINavigationController <UINavigationBarDelegate>

@end

@implementation CustomNavigationController

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
BOOL shouldPop = [[self topViewController] enableBackButton]; // every view controller overrides this method to disable or enable pop of view controller
if (shouldPop) {
//here is the warning about "UINavigationController may not respond to selector"
return [super navigationBar:navigationBar shouldPopItem:item];
} else {
return NO;
}
}

@end

最佳答案

Apple 关于 UINavigationController 的文档:此类不用于子类化。

虽然此意图不是禁令,并且在技术上可能不会让您被拒绝(使用似乎没有引用任何私有(private) API),但它应该会影响您的设计决策。您现在或将来可能会继承意外行为(如果父类(super class)的内部发生某些变化)。导航 Controller 很方便,但根据您的需要,您最好自己动手。

一种替代方法可能是使用标准导航 Controller ,但将其 navigationBar 属性设置为隐藏。然后,您可以设计自己的导航栏并将其包含在 XIB 中,其中包含针对您希望执行的任何操作的任何按钮(例如,后退按钮只需调用 popViewController)。

编辑:不再鼓励对 UINavigationController 进行子类化。

关于iphone - 捕捉 UINavigationController native 后退按钮操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8013877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com