【问题标题】:Show the toast or alert or popup view only once in ios?在 ios 中只显示一次吐司或警报或弹出视图?
【发布时间】:2017-08-30 05:25:45
【问题描述】:

我有一个示例应用程序。当我登录屏幕时,应用程序包含 toast 进入主页视图加载 toast 完美显示我的问题是 toast 仅在主页显示一次再次来到主页 toast 不需要?但是当我再次登录时,我需要展示 toast。我怎样才能做到这一点。哪位大侠给出解决方案。

toast 声明在viewDidLoad:

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus status = [reachability currentReachabilityStatus];
if(status == NotReachable)
{
    NSLog(@"No Internet.");
}

else if (status == ReachableViaWiFi)
{
    wifiImage.image = [UIImage imageNamed: @"wifi_green.png"];
    [self.view makeToast:@"Wifi Is Connected" duration:3.0 position:CSToastPositionBottom];
}

else if (status == ReachableViaWWAN)
{
    ethernetImage.image = [UIImage imageNamed: @"ethernet_green.png"];
    [self.view makeToast:@"Ethernet Is Connected" duration:3.0 position:CSToastPositionBottom];
}

【问题讨论】:

  • 使用NSUserDefualts查看toast是否显示。
  • 但是当我再次登录时,我需要显示吐司
  • 在注销过程中很容易清除NSUserDefualts 的标志
  • 在 appdelegate.m 文件中的 didfinishlaunching 方法中重置标志
  • 查看我的更新答案@MUNNA

标签: ios objective-c iphone


【解决方案1】:

您可以通过将登录状态保存到 NSUserDefaults 来实现此目的。您可以通过以下步骤实现相同的目的。

  1. 保存布尔值表示用户是否已登录

    [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"LoggedIn"];
    
  2. 检查用户是否以前登录或第一次登录并相应地显示toast。

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"LoggedIn"] == FALSE)
    {
      [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"LoggedIn"];
      //show toast
    }
    else
    {
     //hide code for previously logged in user
    }
    
  3. 清除 NSUserDefault 值,或者您甚至可以在注销时将其重置为 false。

    [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"LoggedIn"]; 
    

【讨论】:

    【解决方案2】:

    NSUserDefaults 中将 toast 显示的状态存储为 BOOL 值。在显示弹出窗口之前检查该变量的值。

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"ToastShown"] == FALSE)
     {
          [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"ToastShown"];
         // add your code
    }
    

    注销期间或didfinishlaunching

      [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"ToastShown"];
    

    【讨论】:

    • [[NSUserDefaults standardUserDefaults] 同步];这不是必需的吗?
    • @MUNNA - 不需要
    • 好吧。谢谢@Vinodh
    • synchronize() 会定期自动调用,但您可以在特殊情况下使用同步。请参阅苹果文档here
    【解决方案3】:

    使用这三行简单的代码

      if([[NSUserDefaults standardUserDefaults] boolForKey:@"toast"] == FALSE)
     {
      [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"toast"];
      [[NSUserDefaults standardUserDefaults] synchronize];
      //Toast code will go here...
     }
    

    【讨论】:

      【解决方案4】:

      尝试使用主线程在显示 Toast 的操作 3 秒后切换 UIButton 的用户交互。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多