我有三個視圖控制器,一個根控制器,一個登錄視圖控制器和一個客戶視圖控制器。我想將登錄視圖控制器中輸入的用戶名和密碼傳遞給客戶視圖控制器。我的文件和代碼顯示在下面,請你指導我,如何訪問登錄視圖控制器中設置的變量?或者我怎樣才能將變量傳遞給客戶視圖控制器?如何將變量從一個視圖控制器傳遞給另一個視圖控制器?
我有這些類文件:
/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
正如您在上面看到的,在LoginController.m的loginToAccount方法中,我正在檢查登錄信息,然後爲「customers」子視圖設置新的視圖控制器。
然後,我從超級視圖中刪除當前的「登錄」子視圖,但不知道如何添加新的「客戶」子視圖。
在MainWindow.xib中,我有一個視圖控制器鏈接到ViewController類,它是根控制器。
任何幫助表示讚賞。因爲我是Objective-C和iPhone編程的新手,請盡力解釋考慮一位新手程序員:)
再次感謝。
謝謝,我會按照這樣的方式。 – TamTam 2009-10-15 16:29:11