BFr*_*ree 7 uinavigationcontroller ios ios5
首先,一点背景.我是iOS开发的新手,我已经在.Net上呆了很长时间了,这也许就是为什么我甚至会问这个问题,但是这里也是如此.
基本设置是这样的.你有UINavigationController一个RootViewController,我们会打电话MasterViewController.当这个MasterViewController发生某些动作时,我们想钻进一个DetailsViewController.但是,我们还想将一些数据传递给DetailsViewController.
我的理解是,在以前的SDK版本中(iOS 5之前),这种方法与此类似:
@implementation MasterViewController
-(IBAction)someAction
{
DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
dvc.someDataProp = [self getSomeDataSomeHow];
[[self navigationController] pushViewController:dvc animated:YES];
}
@end
Run Code Online (Sandbox Code Playgroud)
然而,现在,在iOS 5中,似乎现在使用Storyboard和segues完成.在XCode中,您将从MasterViewController设置为segue到DetailsViewController,然后在代码中执行以下操作:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
Run Code Online (Sandbox Code Playgroud)
我的问题基本上是这样的:老方法对我来说感觉更清洁了.您正在非常清楚地了解ViewController您正在推送到导航堆栈的类型,并且您可以轻松地在其上设置属性.然而,在新的方法中,destinationViewController是类型的id(出于显而易见的原因),它对我来说感觉不那么干净.再次,这可能是我的.Net方面出现,但这在iOS中常见吗?只是使用id并谨慎对待风?
使用Storyboard,您可以为segue分配命名标识符,选择segue,在属性检查器中,您可以为segue标识符添加名称.
在prepareForSegue方法中,您应该检查此标识符,因此您将明确知道将要执行哪个segue以及destinationViewController将是什么.
if ([segue.identifier isEqualToString:@"My First Segue Identifier"])
{
DetailsViewController *dvc = (DetailsViewController *) segue.destinationViewController;
// Set the DVC's properties
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7464 次 |
| 最近记录: |