【问题标题】:objective-c: help me understand views and modal transition目标-c:帮助我理解视图和模态转换
【发布时间】:2012-12-26 17:24:44
【问题描述】:

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

我有两个视图,它们在情节提要中设置了自己的视图控制器。主菜单上的按钮通向其他视图。我完全通过 ctrl-click 并选择模态转换来设置这个转换。我还有一个从其他视图返回主菜单的按钮,设置类似。

为了进一步了解这些转换,我决定我希望主菜单在加载时播放声音,但仅在我第一次点击运行时播放,而不是在我点击其他视图按钮时再次播放返回菜单视图。

在我的菜单视图中,我有一个私有属性 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 从未真正初始化过,但我什至不知道我会在哪里这样做。

旁注:我喜欢苹果为我们提供了故事板等所有这些便利,但我几乎希望更容易看到这些东西背后的所有代码,这样我才能真正理解当我“segue”时发生了什么' 在视图之间。

无论如何,谢谢!

【问题讨论】:

  • 因为故事板每次都会创建一个新的 VC 实例。当一个实例被释放并分配一个新实例时,设置属性并不重要
  • 如果主菜单是“正在加载”,则调用viewDidLoad。理想情况下 viewdidLoad 应该只被调用一次,除非另一个 viewController(同一个类)被推入堆栈。

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


【解决方案1】:

我做了更多的研究并回答了我自己的问题。

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

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

正如评论者所描述的,正在执行,启动我的主菜单的一个新实例。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多