呈现和解除模态视图控制器
任何人都可以给我的示例代码,我可以用来首先提出一个模式的视图控制器,然后解雇它? 这是我一直在尝试的:
NSLog(@“%@”,blue.modalViewController); [蓝色presentModalViewController:红色animation:是]; NSLog(@“%@”,blue.modalViewController); [blue dismissModalViewControllerAnimated:YES]; NSLog(@“%@”,blue.modalViewController);
这段代码在viewDidLoad中(“blue”和“red”都是UIViewController的子类)。 我希望我会显示红色的视图,然后立即隐藏它,用一些animation。 然而,这段代码只提供了模态视图,并没有消除它。 任何想法? 第一个日志显示“空”,而另外两个日志显示<RedViewController:0x3d21bf0>
另一点是,如果我把这个代码放在applicationDidFinishLaunching中:红色的视图根本不会出现,所有的日志都会变成“null”
首先,当你把代码放在applicationDidFinishLaunching中时,可能是从Interface Builder实例化的控制器还没有链接到你的应用程序(所以“红色”和“蓝色”仍然是nil
)。
但是要回答你最初的问题,你做错了什么是你调用dismissModalViewControllerAnimated:
在错误的控制器! 应该是这样的:
[blue presentModalViewController:red animated:YES]; [red dismissModalViewControllerAnimated:YES];
通常情况下,“红色”控制器应该决定在某个时候解散自己(也许当点击“取消”button时)。 然后“红色”控制器可以调用自己的方法:
[self dismissModalViewControllerAnimated:YES];
如果它仍然不起作用,这可能与控制器是以animationforms呈现的事实有关,所以可能不允许在呈现控制器之后立即解散控制器。
我在xcode4.52中感到厌倦的最简单的方法是创build一个额外的视图,并通过使用segue模式(控制将button从视图1拖到第二个视图,selectModal)来连接它们。 然后将button拖到第二个视图或您创build的模态视图中。 控制并拖动此button到头文件并使用动作连接。 这将在您的controller.m文件中创build一个IBaction。 在代码中查找您的button操作types。
[self dismissViewControllerAnimated:YES completion:nil];
presentModalViewController:
MainViewController *mainViewController=[[MainViewController alloc]init]; [self.navigationController presentModalViewController:mainViewController animated:YES];
dismissModalViewController:
[self dismissModalViewControllerAnimated:YES];
迅速
更新了Swift 3
故事板
创build两个视图控制器与每个button。 对于第二个视图控制器,请将类名称设置为SecondViewController
,将故事板ID设置为secondVC
。
码
ViewController.swift
import UIKit class ViewController: UIViewController { @IBAction func presentButtonTapped(_ sender: UIButton) { let storyboard = UIStoryboard(name: "Main", bundle: nil) let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC") myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical self.present(myModalViewController, animated: true, completion: nil) } }
SecondViewController.swift
import UIKit class SecondViewController: UIViewController { @IBAction func dismissButtonTapped(_ sender: UIButton) { self.dismiss(animated: true, completion: nil) } }
资源:
- 文档
- 那么回答
迅速
self.dismissViewControllerAnimated(true, completion: nil)
最简单的方法是使用Storyboard和Segue。
只需从您的TabBarController的FirstViewController(而不是导航控制器)创build一个塞格到loginUI的LoginViewController并将其命名为“showLogin”。
创build一个方法返回一个BOOL来validation用户login和/或他/她的会话是否有效…最好在AppDelegate上。 调用它isSessionValid。
在你的FirstViewController.m覆盖方法viewDidAppear,如下所示:
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if([self isSessionValid]==NO){ [self performSegueWithIdentifier:@"showLogin" sender:self]; } }
然后,如果用户login成功,只需closures或popupLoginViewController来显示您的标签。
工程100%!
希望它有帮助!