如何“重置”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 应用程序中的选项卡栏 的相关文章

  • iPhone - 如何在矩形中间绘制文本

    有没有一种方法可以在矩形中间绘制文本 我可以找到各种对齐方式 但我尝试过的任何方法都不能将文本垂直居中在矩形中 有没有一种简单的方法可以做到这一点 或者有什么方法可以将矩形居中然后在其中绘制 我直接绘制到 CGContext 尝试使用 NS
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • UINavigationController 在 UITabBarController 的 moreNavigationController 中不起作用

    我正在处理UINavigationControllers在我的应用程序中 全部由UITabBarController 一切工作正常 直到我的控制器落入自动生成的 更多 选项卡 我在简单的示例中重现了该问题 难道我做错了什么 我想不通 感谢您
  • 设置 TableView setEditing 时无法选择 UITableViewCell

    我希望能够选择多行 如下所示的默认邮件应用程序 我有一个名为编辑的按钮 可以调用 self myTableView setEditing YES animated YES 编辑按钮成功显示单元格左侧的圆圈 如上所示的邮件应用程序 但是 当我
  • APNS(Apple 推送通知服务器)的反馈服务

    我们正在使用Java作为推送通知提供商APNS I我能够将消息发送到APNS但我不知道如何获得该消息的反馈 请帮忙 反馈服务具有类似于用于发送推送通知的接口的二进制接口 您可以通过以下方式访问生产反馈服务feedback push appl
  • 如何使用libxml解析来解析xml数据

    这是一个我想使用libxml解析来解析的xml结构 我如何获取 campaign 标签的属性值 即ID对于 图像 标签 即url and size 如果我使用这些值 我可以提取 code 标签和 name 标签的值 static const
  • 如何连续关闭 2 个模态视图控制器?

    我有 2 个以模态方式呈现的视图控制器 A presents B which presents C 当我解雇C时 我也想解雇B 但我不知道该怎么做 解雇C self dismissModalViewControllerAnimated YE
  • 一旦 webapp 添加到主屏幕,是否可以强制 iphone/ipod 更新 apple-touch-icon?

    我使用 safari 的所有推荐链接和元标记创建了一个网络应用程序 例如
  • iphone:sizeWithFont 方法无法识别字符串中的“\n”

    我使用下面的代码来计算字符串标签的大小 NSString str It s n that n don t n CGSize size str sizeWithFont UIFont fontWithName Verdana size 12
  • Objective-C - NSNotificationCenter 放在哪里?

    我有一个 NSNotificationCenter 选择器 把它放在哪里 在委托中 如果是 那么在哪里 在控制器中 方法也放在哪里 我需要解除分配 NSNotificationCenter 吗 NSNotificationCenter de
  • 将UIWebView显示的PDF保存到本地

    我有一个UIViewController与UIWebView显示一个 pdf 文件 具体取决于之前单击的行UITableView 现在我想添加一个按钮 供用户在本地保存此 pdf 文件以供离线使用 然后还有第二个UITableView它应该
  • xcode 6 资产目录 iPhone 6

    这个问题还没有得到解答 使用资产目录时 特定于设备 非通用 选项为 1x 2x r 2x 3x 1x 是不必要的 因为它不是视网膜 2x 是 ip4 的最佳选择 分辨率为 640x960 r 2x 适合 ip5 分辨率为 640x1136
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • iphone - 如何读取麦克风输入?

    如何从麦克风读取声音数据 我不想录制然后访问数据 我希望能够实时访问声音输入 您可以将麦克风中的声音 PCM 样本 录制到非常短的内存缓冲区 持续时间短至几毫秒 这与使用 iOS API 一样接近 实时 查看 aurioTouch 示例 了
  • 如何知道两个 NSDate 是否在同一天

    你知道如何知道两个NSDate是同一天 我想考虑到区域设置 使用a可能很容易timeIntervalSinceDate 但星期一 23H58 和星期二 00H01 不在同一天 处理NSDate和计算区域设置不是很容易 NSCalendar
  • 如何在 iOS 上更改设备音量 - 而不是音乐音量

    我想更改 iOS iPhone 上的设备音量 我知道我可以使用以下几行更改音乐库的音量 implement at first MediaPlayer framework MPMusicPlayerController musicPlayer
  • 当表格为空时 iPhone UITableView 图像背景

    我想当我的 UITableView 为空时显示图像背景 目前 我尝试将 UIImageView 添加到包含表格的视图控制器 但 XCode 不允许这样做 有没有好的方法呢 您可以在表视图顶部添加图像视图或更改表视图的背景视图 Check i
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • 使用自定义格式将字符串转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 到 NSDate https stackoverflow com questions 1353081 nsstring to nsdate iPhone 如何将 yyyyMMddTh
  • 是否所有新应用程序都必须在 iPad 上运行才能通过应用程序商店审批流程? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我的一个朋友告诉我 有一个新的规则可以通过应用商店的审批流程 该应用程序还必须在 iPad 上运行 否则会被拒绝 我没有找到任何支持他说法的东西

随机推荐