objective-c:帮助我理解观点和模态转换

时间:2013-01-12 03:17:50

标签: iphone objective-c storyboard modal-dialog segue

我对模态转换的工作方式缺乏认真的理解,所以请不要留下最简单的答案。

我有两个视图,他们在storyboard中设置了自己的视图控制器。主菜单上的按钮指向其他视图。我完全通过按住Ctrl键单击并选择模态转换来设置此转换。我也有一个从另一个视图回到主菜单的按钮,设置类似。

为了进一步了解这些过渡,我决定我希望主菜单在加载时发出声音,但只是第一次点击运行,而不是当我按下按钮时另一个视图回到菜单视图。

在我的菜单视图中,我有一个私有属性BOOL

@interface MainMenuViewController ()
@property BOOL menuSoundPlayed;
@end

和我的viewDidLoad ......

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (!self.menuSoundPlayed){
        //sound setup code omitted for clarity
        AudioServicesPlaySystemSound(mySound);
        self.menuSoundPlayed = YES;
    }
}

有人可以帮我理解为什么主菜单视图加载时菜单声音会播放吗?我确实承认menuSoundPlayed从未真正初始化,但我不知道我甚至会做到这一点。

旁注:我喜欢苹果给我们带来了所有这些便利,比如故事板,但我几乎希望能够更容易地看到这些事情背后的所有代码,所以我真的可以理解当我在做什么时发生了什么'在观点之间。

无论如何,谢谢!

1 个答案:

答案 0 :(得分:1)

我做了一些研究并回答了我自己的问题。

在我之前遇到的情况中(在我的问题中描述)我有代码

[self performSegueWithIdentifier:@"mainMenuSegue" sender:sender];

正在执行,正如评论者描述的那样,启动了我的主菜单的新实例。

我想要的是返回已经创建的主菜单实例。

要做到这一点,需要以下代码(显然有你自己的完成块):

[self dismissViewControllerAnimated:YES
                         completion:^{
                             NSLog("view dismissed");
                         }];