【问题标题】:pushviewcontroller is not working in ios7pushviewcontroller 在 ios7 中不起作用
【发布时间】:2014-01-24 10:32:06
【问题描述】:

第一次 VC1 到 VC2 [self.navigationController pushViewController:mainView animated:YES] 工作正常。从 VC2 到 VC3 在 ios7 中不工作。

VC1->VC2(工作正常)

- (IBAction)loginBtnAction:(id)sender
{

    GVMainViewController *mainView;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPhone" bundle:nil];
    } else
    {
        mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPad" bundle:nil] ;
    }

    [self.navigationController pushViewController:mainView animated:YES];
}

VC2->VC3(不工作)

- (IBAction)doneButtonAction:(id)sender
{
    [[FinishViewController getsharedInstance]updateProfileInfo];
    [self performSelector:@selector(moveTo) withObject:nil afterDelay:0.5];

}

- (void)moveTo
{
    GVMainViewController *mainView;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPhone" bundle:nil];

    } else
    {
        mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPad" bundle:nil] ;
    }

    [self.navigationController pushViewController:mainView animated:YES];
}

并且还获得了一些日志在意外状态下完成了导航转换。导航栏子视图树可能会损坏。在所有 iOS 版本中,但在 ios7 中它不会推送视图控制器。

请任何人告诉我iOS7及更低版本的解决方案。提前致谢。

【问题讨论】:

  • 在 iOS7 中,在前一个动画完成之前,您无法将新的视图控制器推送到导航堆栈中。

标签: ios objective-c


【解决方案1】:

mainView 应该在 performSelector 启动后台线程时被推送到主线程。

- (void)moveTo
{
    GVMainViewController *mainView;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
         mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPhone" bundle:nil];

    } 
    else
    {
        mainView = [[GVMainViewController alloc] initWithNibName:@"GVMainViewController_iPad" bundle:nil] ;
    }

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.navigationController pushViewController:mainView animated:YES];
    });
}

【讨论】:

  • 苹果对–performSelector:withObject:afterDelay:有不同看法:这个方法设置了一个定时器,在当前线程的运行循环中执行aSelector消息我>...只是说。
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
相关资源
最近更新 更多