【问题标题】:Cannot click back button when open view from remote notirication从远程通知打开视图时无法单击返回按钮
【发布时间】:2018-03-07 12:11:36
【问题描述】:

我的 iOS 应用程序使用 Objective C。它收到一个远程通知,当用户点击它时,它将打开一个特定的视图。

此视图在导航选项卡中有一个后退按钮。在正常情况下可以回到根视图。但是,当我从通知中打开此视图时,无法返回任何视图,也无法离开应用程序。

这是我的云杉代码: 1.从AppDelegate.m打开一个特定的视图:

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

UIViewController *viewAnnouncement =[storyboard instantiateViewControllerWithIdentifier:@"Announcement"];

self.window.rootViewController = viewAnnouncement;
[self.window makeKeyAndVisible];
  1. 返回前一个视图的动作函数(在 viewClass.m 中):

    - (IBAction)onBtnBackClicked:(id)sender {
        [self dismissViewControllerAnimated:YES completion:nil];
     }
    

我相信问题是,当我从通知中打开此视图时,没有父视图可以让它返回。任何人都可以帮助我,当用户从通知中打开此视图时,无论是转到根视图还是返回上一个打开的应用程序

【问题讨论】:

  • 你把viewAnnouncement设置成rootViewController那你怎么得到之前的VC
  • 因为当我从通知中打开应用程序时,我希望立即显示此视图。还有其他方法可以设置这个 viewAnnouncement 吗?
  • 使用当前选项
  • 我找到了解决方法,谢谢大家

标签: ios objective-c iphone apple-push-notifications


【解决方案1】:

编辑:上一个答案没有考虑到您在AppDelegate 中的事实。也许这个答案更好。


转你的[self dismissViewControllerAnimated:YES completion:nil]

进入:

UINavigationController *navigationController = [[UINavigationController alloc] init];
UIViewController *yourPreviousVC = [[UIViewController alloc] init];

    [navigationController pushViewController:yourPreviousVC animated:YES];

如果我错了或者我误解了问题,请不要犹豫,纠正我的答案。

【讨论】:

  • 你将如何获得AppDelegate中的self
  • 我的错!抱歉,我没有看到它在 AppDelegate 中!感谢您的评论。
  • 没关系,兄弟,你能修改答案吗
  • 感谢您的帮助,我找到了解决方案,我会在这里发布。
  • 太棒了!感谢您分享您的答案。
【解决方案2】:

试试这个

Announcement *annouce = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Announcement"];
HomeVC *home = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"HomeVC"];
[((UINavigationController *)self.window.rootViewController) setViewControllers:@[home,annouce] animated:YES];

如果应用已经打开并且您想转到上一页

Announcement *annouce = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"Announcement"];
UIViewController *visibleView = ((UINavigationController *)window.rootViewController).visibleViewController;
[((UINavigationController *)self.window.rootViewController) setViewControllers:@[visibleView,annouce] animated:YES];

【讨论】:

  • 感谢您的帮助,非常感谢
【解决方案3】:

我找到了解决方案。我的应用程序有多个视图,我可以从导航列表中查看这些视图。当我想返回主视图时,我只是关闭当前视图。

当前,当我单击通知时会打开一个视图,我不能简单地关闭该视图,因为它被视为根视图。

我做了什么来解决它,我通过 segue 将我的视图(公告)连接到主视图,并设置一个标识符(例如:“leaveAnnouncementPage”。然后,在你的类中,只需在后退按钮的功能中调用此函数即可返回到主视图:

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

这里还有一些有用的链接:

First

Second

感谢大家的帮助,祝你一切顺利

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2015-09-05
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多