我想知道如何正确使用故事板以模态方式设置视图控制器。就个人而言,我更喜欢使用xibs,但似乎故事板越来越受欢迎,将来会成为未来的发展方向。
我通常以模态方式设置视图控制器的方式如下:假设我们有ViewControllerA(简称A)和ViewControllerB(简称B)。
然后我通常会在B.h中添加一个协议,在B想要被解雇时指定委托方法,并将id<theProtocol> delegate
字段添加为assign
属性。假设我在A忙,我想以模态方式呈现B,我会写:
B* b = [[B alloc] initWithNibName:@"B" bundle:nil];
b.delegate = self;
[self presentModalViewController:B animated:YES];
使用故事板,我知道可以通过从按钮拖动到视图控制器并选择模态作为过渡类型,以模态方式设置不同的视图控制器。我只是想知道;我在哪里设置新视图控制器的委托?将事物传递给模态视图控制器的正确做法是什么?我真的不知道与Segues的整个交易是什么......
答案 0 :(得分:5)
根据它,你应该按如下方式设置代表:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddPlayer"])
{
UINavigationController *navigationController =
segue.destinationViewController;
PlayerDetailsViewController
*playerDetailsViewController =
[[navigationController viewControllers]
objectAtIndex:0];
playerDetailsViewController.delegate = self;
}
}
其中@“AddPlayer”是“模态”segue的名称
答案 1 :(得分:0)
您可以直接使用UIStoryboardSegue
中传递的prepareForSegue
对象,而不是使用导航控制器。它有一个名为destinationViewController
的属性,它是正在实例化的视图控制器。我觉得很清洁。
这是一个例子。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddPlayer"])
{
PlayerDetailsViewController
*playerDetailsViewController =
(PlayerDetailsViewController *) segue.destinationViewController;
playerDetailsViewController.delegate = self;
}
}
IMO我认为故事板非常棒,因为它们的功能就像是应用程序的蓝图。我也从不喜欢笔尖。 = d