Completion handler for UINavigationController quot;pushViewController:animatedquot;?(UINavigationController“pushViewController:animated的完成处理程序?)
问题描述
我打算使用 UINavigationController
创建一个应用程序来展示下一个视图控制器.在 iOS5 中,有一种新的方法来呈现 UIViewControllers
:
I'm about creating an app using a UINavigationController
to present the next view controllers.
With iOS5 there´s a new method to presenting UIViewControllers
:
presentViewController:animated:completion:
现在我问我为什么没有 UINavigationController
的完成处理程序?只有
Now I ask me why isn´t there a completion handler for UINavigationController
?
There are just
pushViewController:animated:
是否可以像新的 presentViewController:animated:completion:
那样创建我自己的完成处理程序?
Is it possible to create my own completion handler like the new presentViewController:animated:completion:
?
推荐答案
请参阅 par's answer 了解另一个和更多最新解决方案
See par's answer for another and more up to date solution
UINavigationController
动画使用 CoreAnimation
运行,因此将代码封装在 CATransaction
中并设置完成块是有意义的.
UINavigationController
animations are run with CoreAnimation
, so it would make sense to encapsulate the code within CATransaction
and thus set a completion block.
斯威夫特:
为了快速,我建议创建一个这样的扩展
For swift I suggest creating an extension as such
extension UINavigationController {
public func pushViewController(viewController: UIViewController,
animated: Bool,
completion: @escaping (() -> Void)?) {
CATransaction.begin()
CATransaction.setCompletionBlock(completion)
pushViewController(viewController, animated: animated)
CATransaction.commit()
}
}
用法:
navigationController?.pushViewController(vc, animated: true) {
// Animation done
}
Objective-C
标题:
#import <UIKit/UIKit.h>
@interface UINavigationController (CompletionHandler)
- (void)completionhandler_pushViewController:(UIViewController *)viewController
animated:(BOOL)animated
completion:(void (^)(void))completion;
@end
实施:
#import "UINavigationController+CompletionHandler.h"
#import <QuartzCore/QuartzCore.h>
@implementation UINavigationController (CompletionHandler)
- (void)completionhandler_pushViewController:(UIViewController *)viewController
animated:(BOOL)animated
completion:(void (^)(void))completion
{
[CATransaction begin];
[CATransaction setCompletionBlock:completion];
[self pushViewController:viewController animated:animated];
[CATransaction commit];
}
@end
这篇关于UINavigationController“pushViewController:animated"的完成处理程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:UINavigationController“pushViewController:animated"的完成处理程序?
基础教程推荐
- UINavigationBar 隐藏按钮文本 2022-01-01
- Firebase 云消息传递令牌未生成 2022-01-01
- 从 UIWebView 访问元数据 2022-01-01
- Android - 如何在runOnUiThread 中将数据传递给Runnable? 2022-01-01
- EditText 中的 setHintTextColor() 2022-01-01
- UINavigationItem 的持久 rightBarButtonItem 属性 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 在视图控制器的宽度上水平均匀分布 UIButton 的最简单方法? 2022-01-01
- 更改 UITableView 部分标题的颜色 2022-01-01
- 在 iOS 7 下 CCMenu 错位 2022-01-01