假设我有3个视图控制器,分别标记为“ A”,“ B”和“ C”。现在,“ A”是窗口的rootViewController,当轻按按钮时,它将以模态形式显示“ B”。在“ B”中,当轻按一个按钮时,它应该被“ A”取消,然后“ A”将立即模态显示C。如何做到这一点?这是我希望实现此目标的代码,但我没有成功。
在“ A” viewController处,我声明了一个属性,该属性可在“ B” viewController被“ A”取消时在要调用的头文件中保存一个块。
@property (nonatomic, copy) void (^presentZapLaunch)(void);
这是“ A” viewController的呈现方法,用于呈现“ B”
-(void)presentNextViewCon
{
CYCGestureZapZapViewController *gestureViewCon = [[CYCGestureZapZapViewController alloc]init];
if (!self.presentZapLaunch) {
__weak CYCZapZapViewController *weakRefCon = self;
self.presentZapLaunch = ^{
CYCZapZapViewController *preventWeakRefCon = weakRefCon;
CYCZapZapLaunchViewController *zapLaunch = [[CYCZapZapLaunchViewController alloc]init];
NSLog(@"Called");
[preventWeakRefCon presentViewController:zapLaunch animated:YES completion:nil];
};
}
[self presentViewController:gestureViewCon animated:YES completion:nil];
}
这是“ B”解散方法,由“ A”解散,“ A”应立即显示“ C”
-(void)presentNextViewCon
{
NSLog(@"Hello");
[self.presentingViewController dismissViewControllerAnimated:self completion:^{[(CYCZapZapViewController *)self.presentingViewController presentZapLaunch];}];
}
*请注意,我使用“ A”视图控制器作为窗口的rootViewController,“ A”以模态形式显示“ B”视图控制器。所有“ A”,“ B”和“ C”都是视图控制器。
您可以使用协议让我们说以下例如:
在您的B viewController设置Protocol中:
@class Bviewcontroller;
@protocol BviewControllerDelegate <NSObject>
- (void)BviewcontrollerDidTapButton:
(Bviewcontroller *)controller;
@end
@interface Bviewcontroller : UIViewcontroller
@property (nonatomic, weak) id <BviewControllerDelegate> delegate;
- (IBAction)ButtonTap:(id)sender;
@end
在.m类中
- (IBAction)ButtonTap:(id)sender
{
[self.delegate BviewcontrollerDidTapButton:self];
}
现在向您介绍A_viewController .h类:
#import "Bviewcontroller.h"
@interface A_viewController : UIViewcontroller<BviewControllerDelegate>
.m类
- (void)BviewcontrollerDidTapButton:
(Bviewcontroller *)controller
{
[self dismissViewControllerAnimated:YES completion:^{
// here you can create a code for presetn C viewcontroller
}];
}
重要的是,当您从A_viewController预设Bviewcontroller时,请不要使用诸如
-(void)presentNextViewCon
{
bViewcontroller *gestureViewCon = [[bViewcontroller alloc]init];
gestureViewCon.delegate = self;
[self presentViewController:gestureViewCon animated:YES completion:nil];
}
更新
这是我创建的演示程序,其工作方式如下:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句