Objective c 返回AppDelegate以重新创建uitabbarcontroller
我有一个应用程序,它基于一个带有欢迎屏幕的选项卡栏视图(这会导致登录或注册过程)。基本上,如果您已登录,则直接进入选项卡栏视图,如果未登录,则进入欢迎屏幕,您可以选择登录或注册。假设您转到登录或注册,我希望选项卡栏视图重新出现,但是,所有声明都在AppDelegate中。我怎样才能“回去”给tabbatcontroller打电话?我的课程结构/流程是否正确 因此,请重复:Objective c 返回AppDelegate以重新创建uitabbarcontroller,objective-c,xcode,uiviewcontroller,uinavigationcontroller,uitabbarcontroller,Objective C,Xcode,Uiviewcontroller,Uinavigationcontroller,Uitabbarcontroller,我有一个应用程序,它基于一个带有欢迎屏幕的选项卡栏视图(这会导致登录或注册过程)。基本上,如果您已登录,则直接进入选项卡栏视图,如果未登录,则进入欢迎屏幕,您可以选择登录或注册。假设您转到登录或注册,我希望选项卡栏视图重新出现,但是,所有声明都在AppDelegate中。我怎样才能“回去”给tabbatcontroller打电话?我的课程结构/流程是否正确 因此,请重复: 用户登录->第一个视图是选项卡栏视图 用户注销->欢迎屏幕视图-->登录/注册屏幕视图-->选项卡栏视图 我想知道的是,我需
-(IBAction)done:(id)sender {
?????
}
作为参考,我的appDelegate是:
if(user signed in)
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstTab alloc] initWithNibName:@"FirstTab" bundle:NSBundle.mainBundle];
UIViewController *viewController2 = [[SecondTab alloc] initWithNibName:@"SecondTab" bundle:NSBundle.mainBundle];
UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:viewController2];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, secondNavController, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
}
else
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SigninTabBarTemplateViewController *landingPage = [[SigninTabBarTemplateViewController alloc] initWithNibName:@"SigninTabBarTemplateViewController" bundle:nil];
self.window.rootViewController = (UIViewController *) landingPage;
[self.window makeKeyAndVisible];
}
您可以尝试在您知道用户已成功登录的方法中执行类似的操作。(假设SignedTabbarViewController是您的TabBarController)
您可以尝试在您知道用户已成功登录的方法中执行类似的操作。(假设SignedTabbarViewController是您的TabBarController)
你可以考虑很多选项。 这可以通过使用委托轻松实现。如果您想关闭您以MODAL方式呈现的VC,请为其指定一个
delegate
属性。需要时,将向代理发送一条消息,让其解除VC。使用委托的一个好方法是编写一个自定义procotol
例如:
// the delegate will conform to this protocol
@protocol SignInVCDelegate
// this method will be called when required
//
-(void)signInCompleted;
@end
现在,使您想要的对象符合该协议,例如应用程序委托
// .h
#import "SignInVCDelegate.h"
@interface YourAppDelegate : NSObject <..., SignInDelegate> {
...
SignInVC *signIn;
...
}
-(void)signInCompleted;
@end
现在,为signInVC
提供一个代理属性,该属性将在以模式呈现之前设置,并在登录过程完成时向代理发送一条消息
// in .h
@property(retain) id <SignInDelegate>delegate;
// in .m
@synthesize delegate;
-(IBAction)validateSignIn {
...
[delegate signInCompleted];
}
关于./P>>P>中的委托和通知的更多信息。您可以考虑很多选项。
这可以通过使用委托轻松实现。如果您想关闭您以MODAL方式呈现的VC,请为其指定一个delegate
属性。需要时,将向代理发送一条消息,让其解除VC。使用委托的一个好方法是编写一个自定义procotol
例如:
// the delegate will conform to this protocol
@protocol SignInVCDelegate
// this method will be called when required
//
-(void)signInCompleted;
@end
现在,使您想要的对象符合该协议,例如应用程序委托
// .h
#import "SignInVCDelegate.h"
@interface YourAppDelegate : NSObject <..., SignInDelegate> {
...
SignInVC *signIn;
...
}
-(void)signInCompleted;
@end
现在,为signInVC
提供一个代理属性,该属性将在以模式呈现之前设置,并在登录过程完成时向代理发送一条消息
// in .h
@property(retain) id <SignInDelegate>delegate;
// in .m
@synthesize delegate;
-(IBAction)validateSignIn {
...
[delegate signInCompleted];
}
关于中的委托和通知的更多信息。您刚才写的内容让我觉得我错过了一些重要的东西……我没有任何一个类是TabBarController-所有内容都在AppDelegate(上面)中声明,我从AppDelegate转到firstTabBar对象(第一个选项卡的视图控制器)。因此,我所有的类都是:AppDelegate、FirstTabViewController、SecondTabVireController、HomePage(带有登录/注册按钮、登录视图和注册视图)。我需要为TabBarController单独创建一个类吗?如果这样做会更容易。但是,在“用户登录”中,你在做什么呢块也足够了。我不明白的是如何在signInViewController中执行此操作?我没有任何TabBarController对象可调用…所有内容都在AppDelegate中!请帮助…:(您不应该将两个控制器都放在AppDelegate中。@Vince建议的是最好的方法。但是如果您不想这样做,我建议您在AppDelegate中设置SignenViewController,当用户登录时,您设置tabbarcontroller,删除currentcontroller,然后添加t。)abbarcontroller到AppDelegate。你刚才写的东西让我觉得我错过了一些重要的东西…我真的没有任何一个类是TabBarController-一切都在AppDelegate(上面)中声明,从AppDelegate我转到第一个tabbar对象(第一个选项卡的视图控制器)因此,我所有的类都是:AppDelegate、FirstTabViewController、SecondTabVireController、HomePage(带有登录/注册按钮、登录视图和注册视图)。我是否需要为TabBarController创建一个单独的类?如果这样做会更容易。但您在“用户登录”中所做的是什么块也足够了。我不明白的是如何在signInViewController中执行此操作?我没有任何TabBarController对象可调用…所有内容都在AppDelegate中!请帮助…:(您不应该将两个控制器都放在AppDelegate中。@Vince建议的是最好的方法。但是如果您不想这样做,我建议您在AppDelegate中设置SignenViewController,当用户登录时,您设置tabbarcontroller,删除currentcontroller,然后添加t。)abbarcontroller发送给AppDelegate。谢谢Vince,我会尝试并报告。嘿@Vince-你的示例中的setDelegate是什么?谢谢!嘿@Vince-如果AppDelegate和登录之间有另一个页面,你知道如何实现你的解决方案吗?(这是一个欢迎视图控制器)?谢谢!!@TommyG-我会使用计时器。只需先显示所需的视图,然后设置计时器,1)删除欢迎视图2)使用tabBarController设置窗口的rootViewController,并以VC模式显示登录。这里…你介意我向你发送代码吗?我太绝望了…我在登录和注册页面中实例化了AppDelegate,做了一些奇怪的事情,这样我就可以调用tabBarController,但这听起来确实错误,尽管它可以工作。谢谢Vince,我会试试,然后再报告。嘿@Vince-你的例子中的setDelegate是什么?谢谢!嘿@Vince-如果我在AppDel之间有另一个页面,你知道如何实现你的解决方案吗