如何关闭自己的视图控制器并在按钮水龙头中显示另一个视图控制器?

use*_*002 7 block objective-c ios presentviewcontroller

假设我有3个视图控制器标记为"A","B"和"C".现在,"A"是窗口的rootViewController,当点击按钮时它以模态方式呈现"B".在"B"中,当按下一个按钮时,它应该被"A"解雇,然后"A"将立即以模态方式呈现C.如何做到这一点?这是我希望实现这一目标的代码,但我没有成功.

在"A"viewController中,我声明了一个属性,用于在"B"viewController被"A"解除时,在要调用的头文件中保存一个块.

@property (nonatomic, copy) void (^presentZapLaunch)(void);
Run Code Online (Sandbox Code Playgroud)

这是"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];

}
Run Code Online (Sandbox Code Playgroud)

这是由"A"解雇的"B"解雇方法,"A"应立即出现"C"

-(void)presentNextViewCon
{
NSLog(@"Hello");
[self.presentingViewController dismissViewControllerAnimated:self completion:^{[(CYCZapZapViewController *)self.presentingViewController presentZapLaunch];}];

}
Run Code Online (Sandbox Code Playgroud)

*请注意,我使用"A"视图控制器作为窗口的rootViewController,"A"以模式方式呈现"B"视图控制器.所有"A","B"和"C"都是视图控制器.

Nit*_*hel 9

你可以使用协议,比如说如下: -

进入你的B viewController设置协议:

@class Bviewcontroller;

@protocol BviewControllerDelegate <NSObject>
- (void)BviewcontrollerDidTapButton:
(Bviewcontroller *)controller;

@end

@interface Bviewcontroller : UIViewcontroller

@property (nonatomic, weak) id <BviewControllerDelegate> delegate;
- (IBAction)ButtonTap:(id)sender;

@end
Run Code Online (Sandbox Code Playgroud)

在.m级

- (IBAction)ButtonTap:(id)sender
{
    [self.delegate BviewcontrollerDidTapButton:self];
}
Run Code Online (Sandbox Code Playgroud)

现在给你A_viewController .h类:

#import "Bviewcontroller.h"

@interface A_viewController : UIViewcontroller<BviewControllerDelegate>
Run Code Online (Sandbox Code Playgroud)

.m级

- (void)BviewcontrollerDidTapButton:
(Bviewcontroller *)controller
{
    [self dismissViewControllerAnimated:YES completion:^{


      // here you can create a code for presetn C viewcontroller 

    }];
}
Run Code Online (Sandbox Code Playgroud)

重要的是 当您从A_viewController预先设置Bviewcontroller时,请不要使用对象设置委托

-(void)presentNextViewCon
{
                bViewcontroller *gestureViewCon = [[bViewcontroller alloc]init];
        gestureViewCon.delegate = self;

[self presentViewController:gestureViewCon animated:YES completion:nil];

}
Run Code Online (Sandbox Code Playgroud)

UPDATE

这是我创建一个像以下一样工作的演示:

在此输入图像描述

示例代码链接 http://speedy.sh/2acSC/modelDemo.zip