我目前正在建设一个选项卡式iPhone应用程序,其中每个选项卡的视图控制器是一个实例UINavigationController,并且其中每一个的每个子控制器UINavigationController实例是一个实例UITableViewController.理想情况下,我想子类化,UINavigationController以便每个选项卡的控制器是UINavigationController的子类(UINavigationController显然,除了具有所有标准功能外)还充当与其子控制器关联的每个表视图的数据源和委托. .试图这样做似乎打破UINavigationController了子类中的基本功能.
看到苹果公司在他们的iPhone文档中说一个人不应该是子类UINavigationController,而且当一个人做的时候事情似乎就会破裂,我想知道如何在UINavigationController's不进行子类化的情况下扩展功能,一般来说,如何解决子类化限制时的问题.做可可开发.
谢谢!
我有一个关于取消从UIViewController中的后退按钮触发的后退事件的问题。在Objective-C中,进行了以下扩展。我真的不知道如何将其转换为快速。我到目前为止试图用自己的函数覆盖backBarButton,但是它不起作用:
navigation.backBarButtonItem?.action = #selector(MyController.back)
navigation.backBarButtonItem?.target = self
Run Code Online (Sandbox Code Playgroud)
我搜索了类似委托函数的内容,但是找不到backButton的任何内容。
我有一个UINavigationBar拦截后退按钮点击,如果有未保存的更改,它会提醒用户.这是基于UINavigationController和UINavigationBarDelegate.ShouldPopItem()与MonoTouch使用UINavigationBarDelegate协议和实现的解决方案.- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
现在,iOS7已经引入了向后移动的手势,我也想拦截它,但是无法使用我迄今为止发现的解决方案,即使用[self.interactivePopGestureRecognizer addTarget:self action:@selector(handlePopGesture:)];和
- (void)handlePopGesture:(UIGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateEnded) {
[self popViewControllerAnimated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这确实会弹出视图,但它会使导航栏按钮保持原位,所以我最终会得到一个无处可用的后退按钮,以及我添加到导航栏的所有其他导航按钮.有小费吗?
由于一个奇怪的请求,我试图拒绝,但它没有工作,我不得不覆盖navigationBar的后退按钮.
我已经制作了一个自定义的UINavigationController子类并且破解了该
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item方法.
这是我的代码:
@interface CustomUINavigationController ()
@end
@implementation CustomUINavigationController
#pragma mark - UINavigationBar delegate methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if ([[self.viewControllers lastObject] isKindOfClass:[ViewController1 class]]) {
ViewController1 *vc1 = (ViewController1 *)[self.viewControllers lastObject];
[vc1 handleBackAction];
if (vc1.canPopVC == YES) {
[self popViewControllerAnimated:YES];
return YES;
} else {
return NO;
}
}
[self popViewControllerAnimated:YES];
return YES;
}
@end
Run Code Online (Sandbox Code Playgroud)
一切正常,除非我以编程方式弹出viewController.每次我想在弹出后执行推送时,应用程序都会崩溃.转向NSZombie on,显示当以编程方式弹出viewController时,其父viewController被释放.此时,制作自定义backButton不是一个选项,因为它将丢失原生iOS 7滑动到popViewController功能.
崩溃日志:
*** -[ContactsDetailViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x1806b790
Run Code Online (Sandbox Code Playgroud) ios ×3
objective-c ×2
back ×1
cocoa-touch ×1
iphone ×1
subclass ×1
subclassing ×1
swift ×1
swipe ×1
uikit ×1