2011-08-05 63 views
0

我在我的应用程序中使用了主窗口,其中有一个TabController用于我的主菜单。iOS:如何显示登录表单?

现在我想为我的应用程序提供登录表单。 我添加了一个视图(LoginViewController),并显示在开始这样的观点:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
// Add the tab bar controller's current view as a subview of the window 

self.window.rootViewController = self.tabBarController; 
[self.window makeKeyAndVisible]; 

LoginViewController *lvc = [[LoginViewController alloc]  initWithNibName:@"LoginViewController" bundle:nil]; 
lvc.delegate = self; 
[self.tabBarController presentModalViewController:lvc animated:false]; 
[lvc release]; 

return YES; 
} 

接下来,我必须在我的观点登录的检查,还行。

现在我尝试在此之后关闭视图。 为此,我寻找了一圈,发现这里的问题是:present modal view controller

我所有的东西添加到我的项目,但得到一个错误在此代码:

#import <UIKit/UIKit.h> 

@interface Animexx3AppDelegate : NSObject <UIApplicationDelegate, 
          UITabBarControllerDelegate, LoginViewControllerDelegate> 
{ 
UIWindow *window; 
UITabBarController *tabBarController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 

@end 

这意味着“找不到协议LoginViewControllerDelegate”看齐2/3。

加在该行“lvc.delegate =自我”我知道,告诉我一个警告“分配给‘ID’从类型不兼容‘Animexx3AppDalagte’。

什么了我错了?

+0

请将'false'布尔文字改为'NO',它与Cocoa定义的文字相同。你会注意到你的代码读得更好,和我一样的Objective-C程序员在我们看到你的代码时不会畏缩:)。 – PeyloW

回答

2

您需要导入,你声明的LoginViewControllerDelegate协议的头文件。最有可能的LoginViewController.h文件。

0

有很多次努力之后,我们发表了一篇名为CLHoppingViewController一个开源库,它处理正是这种情景。

所以,你的情况,你会做这样的事情来形容启动流程:

UIViewController *loginViewController; 
UIViewController *mainViewController; 

if (user_not_logged_in) { 
    [self hopToViewController:loginViewController then:^{ 
    [self hopToViewController:mainViewController then:nil]; 
    }]; 
} 
else { 
    [self hopToViewController:mainViewController then:nil]; 
} 

库可以支持更加先进的条件序列。例如,您可以显示启动画面,有条件地显示入职UX等。

有一个简短的教程here