如何“重置”iPhone 应用程序中的选项卡栏

2023-12-21

我有一个 iPhone 应用程序: 当您打开应用程序时,您会看到“LoginView”。如果您登录应用程序,您会看到一个 TabBarController。在第三个也是最后一个选项卡中有“注销”按钮。如果单击,您将再次看到“LoginView”。我的问题是,如果您再次登录,您会看到“旧”选项卡栏,并且所选选项卡是第三个而不是第一个,并且有一个“注销”按钮。另外,如果用户使用不同的用户登录,则会看到前一个用户的旧数据(非常危险)。

这是代码: - 委托.h:

UITabBarController *tabBarController;
LoginViewController *loginView;

- Delegate.m(didFinishLaunchingWithOptions):

[self.window makeKeyAndVisible];

loginView = [[LoginViewController alloc] init];

if (YES) { /* if the user is not already logged */
    [self.window addSubview:loginView.view];
}

Delegate.m(方法):

- (void)loginComplete {
    [loginView dismissModalViewControllerAnimated:YES];
    [window addSubview:tabBarController.view];
}

- (void)logoutComplete {
    [[tabBarController view] removeFromSuperview];
    [tabBarController release];
    [window addSubview:loginView.view];
}

这是两个不同视图控制器中的两种方法:

- (IBAction)login:(id)sender {

     TabNavisAppDelegate *delegate =
      (TabNavisAppDelegate *) [[UIApplication sharedApplication] delegate];
  [delegate loginComplete];
  }

(注销方法相同)

各位,我该如何解决这个痛苦的问题呢? 因此,这里列出了可以实现我想要的功能的应用程序:“Foursquare”、“Brightkite”等。 每个都有一个登录屏幕、一个选项卡视图和一个注销按钮。

感谢大家。


对于登录-注销-登录的情况,所有事情都需要在注销或下次登录时自行重置,我喜欢创建一个通知,例如“NewUserReset”。所有需要将自身重置为原始状态的东西都会侦听通知并运行一个方法来执行所需的任何类型的重置。选项卡栏会将按钮标题更改为注销、临时数据结构 nil/zero/release 本身等。

它很好地将注销与所有必须完成的事情解耦,因此您无需尝试从接收注销点击的控制器操作视图控制器和数据存储以及视图外观。

发送通知很容易。当用户点击“注销”按钮时,您将发送如下通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"JMUserLogout" 
                                                object:nil];

您不必将其称为 JMUserLogout,您只需要一个您会识别的字符串和一些东西(我使用了您的姓名缩写)来帮助确保您不会意外发送与通知名称相同的通知你没有意识到正在倾听。

当该通知发出时,任何已向 defaultCenter 注册以侦听@“JMUserLogout”的对象都将执行您选择的任何操作。以下是对象的注册方式(这应该位于 ViewWillLoad 或对象的初始化方法等某个地方):

[[NSNotificationCenter defaultCenter] addObserver:self 
                                     selector:@selector(resetForNewUser:)
                                         name:@"JMUserLogout"
                                       object:nil];

那里的选择器,resetForNewUser:,只是通知发出时您想要运行的方法的名称。该方法如下所示:

- (void)resetForNewUser:(NSNotification *)notif {
    // DO SOMETHING HERE
}

在显示 // DO SOMETHING HERE 的地方,您将添加特定于您的应用程序的代码。例如,您可以将选项卡栏添加为 JMUserLogout 通知的观察者。在其resetForNewUser: 方法中,您可以将注销按钮的名称更改为Login。

在保存来自先前用户的旧数据的 ViewController 或 View 或数据存储中,resetForNewUser 方法将删除所有这些数据并将其设置回新用户之前应有的方式。例如,如果前一个用户将数据输入到 UITextField 中,您将删除该文本,yourTextFieldName.text = @"";

最后,在释放对象之前,将对象作为观察者删除也很重要。在注册接收通知的每个对象的 Dealloc 方法中,添加以下内容:

[[NSNotificationCenter defaultCenter] removeObserver:self];

希望这是有道理的。这NSNotificationCenter 的 Apple 文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html解释了更多内容,并提供了几个使用通知的示例应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何“重置”iPhone 应用程序中的选项卡栏 的相关文章

  • 使用“presentModalViewController”加载视图

    我正在尝试从另一个视图控制器加载临时的滑入视图 我的应用程序的视图控制器的结构如下 Application gt Tab Bar Controller gt TabBarItem gt View Controller 在此视图控制器中 我有
  • iPhone OS:从匿名对象获取方法和变量列表

    我正在构建我的第一个 iPhone Obj c 应用程序 并且我有大量的数据保存子类 我将它们传递给引用函数 对于 cite 函数 这些对象是匿名的 我需要找到一种方法来访问每个传递对象的所有变量 我一直在使用预构建的 NSArray 和选
  • 特定时间的 iPhone 本地通知

    我想每周晚上 10 点 无论哪个国家 地区 发出通知 我需要使用时区吗 目前 我使用下面的代码每周触发通知 但如何在晚上 10 点准确触发通知 NSDate date NSDate date NSDate myNewDate date da
  • 如何将 UIPopoverPresentationController 的高度设置为与 UITableView 相同

    我在我的应用程序上使用 UIPopoverPresentationController 在我的 iPhone 上显示弹出窗口 使用 UIModalPresentationNone 我希望尺寸随着 UITableView 的高度而动态变化 但
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • rightBarButtonItem 信息按钮,右侧没有空格

    我有一个UIViewController设置为在其右侧显示一个信息按钮UINavigationItem像这样 UIButton infoButton UIButton buttonWithType UIButtonTypeInfoLight
  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • 如何以编程方式设置设备(UI)方向?

    希望屏幕 UI 上的所有内容都能够从横向左向右旋转 反之亦然 我该怎么做呢 这是私人的吗 我知道 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation inte
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • iPhone 上的双精度与浮动

    我刚刚听说 iPhone 本身无法进行双倍操作 从而使它们比常规浮动慢得多 这是真的 证据 我对这个问题很感兴趣 因为我的程序需要高精度计算 而且我将不得不在速度上妥协 iPhone 可以在硬件中执行单精度和双精度算术 在 1176 原始
  • iPhone - UIImage imageWithData 返回 nil

    我需要从字节数组创建 UIImage 现在我创建了字节数组 image CGImageCreateWithImageInRect aux CGImage imageRect context CGBitmapContextCreate dat
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 将 NSData 转换回音频文件

    我已经转换了我的 caf音频文件到NSData使用以下代码行对象 NSData audioData NSData dataWithContentsOfFile MyRecorderFilePathURL path options 0 err
  • 我可以通过 SDK 访问 iPhone 上的可视语音邮件文件吗?

    我想访问存储在 iPhone 上的可视语音邮件文件 有没有办法通过SDK访问这些文件 有人有处理这些文件的经验吗 我假设它们是从网络下载并存储在 iPhone 本地的文件 不 iPhone 上的每个应用程序都是独立的 因此您无法访问任何其他
  • 核心数据executeFetchRequest消耗大量内存

    我正在核心数据数据库中插入 cca 100 000 条记录 数据库包含 3 个实体 球员 俱乐部 球员俱乐部 实体之间存在关系 玩家 gt 玩家俱乐部俱乐部 在 PlayerClub 中插入时 我注意到插入大约 50 000 条记录后会消耗
  • 尽早检测有问题的 XIB 视图

    我的笔尖名称有一个拼写错误 当我推向导航控制器时 它在代码中被破坏了 弄清楚它并没有花太长时间 但我认为最好尽早断言格式良好 以便更容易弄清楚 问题是它不是零 它只是无法从笔尖正确地形成自己 在 initWithNib 之后是否有更好的断言
  • UISearchDisplayController—为什么我的搜索结果视图包含空单元格?

    我快要疯了 在我的核心数据数据库中 我有很多用户 我已经通过 NSFetchedResultController 将数据库连接到 tableviewcontroller 当视图加载时 我看到了所有用户 我可以通过 Storyboard Se

随机推荐