我得到dismissModalViewControllerAnimated在以下设置上正常工作但我很困惑为什么它适用于self(modalViewController)而不是parentViewController.
这是设置:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Root";
_data = [NSArray arrayWithObjects:@"One", @"Two", nil];
_detailController = [[DetailViewController alloc] init];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showAbout)];
}
- (void)showAbout
{
AboutViewController *abv = [[AboutViewController alloc] init];
abv.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:abv animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
这是模态视图控制器AboutViewController,带有一个工具栏按钮,用于触发关闭模式的关闭操作:
- (IBAction)dismissAction:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么[self dismissModalViewControllerAnimated]工作而不是[self.parentViewController dismissModalViewControllerAnimated] ?? 这是iOS 5中的新功能吗?我以为只有parentViewController才能解除子模态视图?
谢谢!
NJo*_*nes 10
[self dismissModalViewControllerAnimated:YES];已经工作了一段时间.如果你问我,iOS开发中最好的秘密之一.
然而,self.parentViewController不工作对iOS 5来说实际上是新的.它已被'替换' self.presentingViewController.
这会导致尝试与iOS 5兼容的代码产生一个有趣的问题.因为您已经self.parentViewController在iOS 5上找到了返回nil.并且UIViewControllers不响应presentingViewControlleriOS 5之前的版本.
它让我们做这样的事情:
if ([self respondsToSelector:@selector(presentingViewController)]){
[self.presentingViewController dismissModalViewControllerAnimated:YES];
}
else {
[self.parentViewController dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
小智 8
而不是使用NJones所说的,我建议坚持
[self dismissModalViewControllerAnimated:YES]
Run Code Online (Sandbox Code Playgroud)
这将适用于所有操作系统的原因在文档本身中说明:
"呈现视图控制器负责解除它所呈现的视图控制器.但是,如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发给呈现视图控制器. "
注意:虽然在iOS5.0中有关此方法的说明.dismissModalViewControllerAnimated:方法已被弃用.dismissViewControllerAnimated:completion:应该在这里使用.
| 归档时间: |
|
| 查看次数: |
6872 次 |
| 最近记录: |