У меня есть три контроллера представления, один корневой контроллер, один контроллер представления входа в систему и один контроллер представления клиентов. Я хочу передать введенное имя пользователя и пароль в контроллере представления входа в контроллер представления клиента. Мои файлы и код показаны ниже. Не могли бы вы подсказать мне, как получить доступ к переменным, установленным в контроллере представления входа в систему? Или как я могу передать переменные контроллеру представления клиентов?
У меня есть эти файлы классов:
/classes/MySoftwareAppDelegate.h
/classes/MySoftwareAppDelegate.m
/classes/ViewController.h
/classes/ViewController.m
/classes/LoginController.h
/classes/LoginController.m
/classes/CustomersController.h
/classes/CustomersController.m
У меня такие взгляды:
/resources/MainWindow.xib
/resources/Login.xib
/resources/Customers.xib
В AppDelegate я успешно вставил вспомогательное представление «Вход», и оно отображается при каждом запуске приложения.
В окне входа в систему я ввожу свое имя пользователя и пароль, а затем нажимаю кнопку «Войти». При нажатии этой кнопки запускается IBAction. В этом IBAction я хочу изменить текущее представление с клиентами.
Вот код, который я использовал:
MySoftwareAppDelegate.h
#import <UIKit/UIKit.h>
@class ViewController;
@interface MySoftwareAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
ViewController *viewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewController *viewController;
@end
MySoftwareAppDelegate.m
#import "MySoftwareAppDelegate.h"
#import "ViewController.h"
@implementation MySoftwareAppDelegate
@synthesize window;
@synthesize viewController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
@end
ViewController.h
#import <UIKit/UIKit.h>
@class LoginController;
@interface ViewController : UIViewController {
LoginController *loginController;
}
@property (nonatomic, retain) LoginController *loginController;
@end
ViewController.m
#import "ViewController.h"
#import "LoginController.h"
@implementation ViewController
@synthesize loginController;
- (void)viewDidLoad {
LoginController *tmpViewController = [[LoginController alloc] initWithNibName:@"Login" bundle:nil];
self.loginController = tmpViewController;
[self.view insertSubview:loginController.view atIndex:0];
[tmpViewController release];
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
if (self.loginController.view.superview == nil) {
self.loginController = nil;
}
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[loginController release];
[super dealloc];
}
@end
LoginController.h
#import <UIKit/UIKit.h>
@class CustomersController;
@interface LoginController : UIViewController {
UIButton *loginButton;
UITextField *usernameTextField;
UITextField *passwordTextField;
NSMutableString *available_credits;
NSString *current_xml_element;
CustomersController *customersController;
}
@property (nonatomic, retain) IBOutlet UIButton *loginButton;
@property (nonatomic, retain) IBOutlet UITextField *usernameTextField;
@property (nonatomic, retain) IBOutlet UITextField *passwordTextField;
@property (nonatomic, retain) NSMutableString *available_credits;
@property (nonatomic, retain) NSString *current_xml_element;
@property (nonatomic, retain) CustomersController *customersController;
-(IBAction)textFieldDoneEditing:(id)sender;
-(IBAction)backgroundTap:(id)sender;
-(IBAction)loginToAccount:(id)sender;
@end
LoginController.m
#import "LoginController.h"
#import "CustomersController.h"
@implementation LoginController
@synthesize loginButton;
@synthesize usernameTextField;
@synthesize passwordTextField;
@synthesize customersController;
- (void)viewDidLoad {
UIImage *buttonImageNormal = [UIImage imageNamed:@"whiteButton.png"];
UIImage *stretchableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
UIImage *buttonImagePressed = [UIImage imageNamed:@"blueButton.png"];
UIImage *stretchableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[loginButton setBackgroundImage:stretchableButtonImageNormal forState:UIControlStateNormal];
[loginButton setBackgroundImage:stretchableButtonImagePressed forState:UIControlStateHighlighted];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[usernameTextField release];
[passwordTextField release];
[super dealloc];
}
-(IBAction)textFieldDoneEditing:(id)sender {
[sender resignFirstResponder];
}
-(IBAction)backgroundTap:(id)sender {
[usernameTextField resignFirstResponder];
[passwordTextField resignFirstResponder];
}
-(IBAction)loginToAccount:(id)sender {
// bla bla bla... Login check process is done here
CustomersController *tmpViewController = [[CustomersController alloc] initWithNibName:@"Customers" bundle:nil];
self.customersController = tmpViewController;
[self presentModalViewController:tmpViewController animated:YES];
[self.view removeFromSuperview];
[tmpViewController release];
}
@end
Как вы можете видеть выше, в методе loginToAccount LoginController.m я проверяю информацию для входа, а затем устанавливаю новый контроллер представления для вложенного представления «клиентов».
Затем я удаляю текущее подчиненное представление «Вход в систему» из суперпредставления, но не знаю, как добавить новое подчиненное представление «Клиенты».
В MainWindow.xib у меня есть один контроллер представления, связанный с классом ViewController, и это корневой контроллер.
Любая помощь приветствуется. Поскольку я новичок в программировании Objective-C и iPhone, пожалуйста, постарайтесь объяснить, учитывая, что это начинающий программист :)
Еще раз спасибо.