我已经实现了一个您登录的应用程序,一旦您登录它就会进入标签栏视图。但是,我想实现一个注销按钮,当用户按下按钮时,它会将它们带回登录视图。
我现在有以下代码,但它不起作用。正在调用UIBarButton,因为它生成NSLog输出到gdb。但它不会改变观点。
在我对标签栏的看法中。
- (IBAction) logoutButtonPushed {
NSLog(@"Yes, I was pushed");
[self.appdelegate logout];
}
然后在我的app delegate中。
// Logout and return to the welcome view
- (void) logout {
[self.tabBarViewController.view removeFromSuperview];
[window addSubview:self.welcomeViewController.view];
[window bringSubviewToFront:self.welcomeViewController.view];
[userModel logout];
}
只是为了踢,这就是我如何将标签栏带到前面。
// Switches to the tab bar view from either the welcome or registersuccess view
- (void) switchToTabBarView {
[self.registerSuccessViewController.view removeFromSuperview];
[self.welcomeViewController.view removeFromSuperview];
[window addSubview:self.tabBarViewController.view];
[window bringSubviewToFront:self.tabBarViewController.view];
}
任何帮助或改进我的代码的建议(我可能有许多不好的做法)都会受到欢迎。谢谢!
答案 0 :(得分:1)
请参阅我的回答question。
您不应该使用self
,因为它不会引用标签栏控制器。而不是self
,使用放置tabbar控制器的视图控制器的实例
在AppDelegate.h
YourViewController *yourViewControllerObj;
@property(nonatomic,retain) YourViewController *yourViewControllerObj;
在AppDelegate.m
@synthesize yourViewControllerObj;
在YourViewController.m
中,为AppDelegate
实例设置对象:
- (void)viewDidLoad
{
appDelegate.yourViewControllerObj = self;
//do what ever u want
}
然后在你的退出功能
- (IBAction) logoutButtonPushed {
NSLog(@"Yes, I was pushed");
loginScreen *loginScreenObj = [[loginScreen alloc] initWithNibName:@"loginScreen" bundle:[NSBundle mainBundle]];
[appDelegate.yourViewControllerObj presentModalViewController:loginScreenObj animated:YES];
[loginScreenObj release];
}