gpt4 book ai didi

iphone - 我怎样才能 "reset"iPhone应用程序中的标签栏

转载 作者:行者123 更新时间:2023-12-03 18:35:38 24 4
gpt4 key购买 nike

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

代码如下:- 委托(delegate).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];
}

这是两个不同 View Controller 中的两种方法:

- (IBAction)login:(id)sender {

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

(注销方法相同)

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

谢谢@大家。

最佳答案

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

它将注销与所有必须完成的事情很好地分离,这样您就不会尝试从接收注销点击的 Controller 中操纵 View Controller 和数据存储以及 View 外观。

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

[[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];

希望这是有道理的。 Apple documentation for NSNotificationCenter解释了更多内容,并提供了几个使用通知的示例应用程序。

关于iphone - 我怎样才能 "reset"iPhone应用程序中的标签栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com