0

我是 iOS 开发的新手,我正在做一个小项目作为研究。

我有一个应用程序,在我启动它后我正在显示MainViewController,但如果这是这个应用程序的第一次启动,我想使用in 调用的方法显示Sub1ViewController(名称是组成的)。presentViewControllerMainViewController

在用户输入一些数据后,Sub1ViewController我调用dismissViewController方法来隐藏它。

困难的部分从这里开始 - 我不知道如何在Sub1ViewController被解雇时捕获事件,我也Sub2ViewController可以使用presentViewControllerinvoked from来呈现MainViewController。一直以来,我都会收到消息,当另一个呈现或关闭正在进行时,我试图呈现视图。

PS:我使用的是Xamarin,但我也了解objective-c。

4

1 回答 1

0

嗨,你可以试试这个

  [self dismissViewControllerAnimated:YES completion:^{
    //code to be executed with the dismissal is completed
   // for example, presenting a vc or performing a segue
}];

您可以在完成关闭一个视图控制器后编写代码

或者您可以在解除方法的一些延迟后通过当前视图来实现这一点

-(void)onDismisViewController{

[self performSelector:@selector(presentSecoundViecontoller) withObject:self afterDelay:1];

}

-(void)presentSecoundViecontoller
{

SecoundViewController *secoundVC = [[SecoundViewController alloc]    initWithNibName:@"secoundVC" bundle:nil];
[self.navigationController presentViewController:secoundVC animated:YES completion:NULL];

}

编辑

试试这个我试试它的工作

在 subviewcontroller1 中创建一个委托方法并在 mainviewcontroller 中设置委托并在 mainvie 中实现方法并在此委托方法中呈现 subviewcontroller2 其工作

试试这个,如果不让我知道会发布代码。

在 subviewcontroller1.h 文件上创建委托

@protocol st1Protocol <NSObject>
    - (void)presentViewController;
@end
@interface SubViewController1 : UIViewController
@property (nonatomic,assign) id <st1Protocol> delegate;
- (IBAction)dissmiss:(id)sender;

SubViewcontroller1.m 文件 我将关闭视图放在 subviewcontroller1 的按钮单击上,您在关闭方法中执行此操作

 - (IBAction)dissmiss:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{
    //code to be executed with the dismissal is completed
    // for example, presenting a vc or performing a segue
       [self.delegate presentViewController];
}];
}

现在在主视图控制器中实现这个委托方法。在 .h 文件中实现委托方法

    @interface StViewController : UIViewController<st1Protocol>

在 mainviewcontroller.m 文件视图中设置委托

- (void)viewDidLoad
  {
      [super viewDidLoad];
      subViewcontroller1 *st1=[[subViewcontroller1  alloc]initWithNibName:@"subViewcontroller1" bundle:nil];
      st1.delegate=self;
      [self presentViewController:st1 animated:YES completion:nil];
  // Do any additional setup after loading the view from its nib.
 }

主视图控制器中的委托方法实现

 -(void)presentViewController{
     SubmViewcontroller2 *st2=[[SubmViewcontroller2 alloc]initWithNibName:@"St2ViewController" bundle:nil];
[self presentViewController:st2 animated:YES completion:nil];
}

希望这可以帮助您快乐编码。

于 2014-04-07T11:21:57.710 回答