IOS登陆+注册+抽奖+排行榜
要求:三個頁面(登錄頁面,pickerView頁面,排行榜頁面),pickerView頁面是三個組件,每個組件顯示0-9,點擊按鈕進行隨機,獲得的值存入排行榜,排行榜顯示大于500的最高的10個分數(shù)和對應(yīng)的用戶名,切換頁面可以用任何方法(0-9循環(huán)顯示,登錄注銷[可以有不同的用戶],判斷用戶名是否為郵箱[正則表達式])
說明:
1.要修改xml文件到當前系統(tǒng)桌面,dic.xml保存的是用戶名和密碼,array.xml是保存的積分榜
2.正則表達式用在注冊頁面,在注冊用戶的時候用戶名需要經(jīng)過正則表達式的驗證,判斷是否是郵箱
3.有一個默認的admin,admin賬戶
4.排行榜顯示是用的tableView顯示的
疑惑:
1.如何創(chuàng)建文件在當前項目下
2.為什么view之間傳數(shù)組傳不了,我知道數(shù)組要先初始化
3.數(shù)組排序,用內(nèi)置的排序方法,compare:,從大到小用什么參數(shù)
4.如何讓tableView中的table隨array的改變而刷新
項目源碼:http://download.csdn.net/detail/s10141303/5970243
步驟:
注冊view
RegistViewController.h:
?
#import <UIKit/UIKit.h> @class LoginViewController; @interface RegistViewController : UIViewController - (IBAction)click:(id)sender; @property (retain, nonatomic) IBOutlet UITextField *txtName; @property (retain, nonatomic) IBOutlet UITextField *txtpassword; @property (retain, nonatomic) IBOutlet UITextField *txtConfirmPassword; @property(retain,nonatomic) NSMutableDictionary *dic; @property(retain,nonatomic) LoginViewController *loginView; @end
RegistViewController.m:
?
?
#import "RegistViewController.h" #import "info.h" #import "LoginViewController.h" #define OK_BUTTON 0 //登陸按鈕 #define CANCEL_BUTTON 1 //取消按鈕 #define BOARD 2 //鍵盤點擊 #define RETURN_BUTTON 3 //返回登陸界面 @interface RegistViewController ()@end@implementation RegistViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {}return self; }- (void)viewDidLoad {[super viewDidLoad];self.dic = [[[NSMutableDictionary alloc] init] autorelease];[self.dic setObject:@"admin" forKey:@"admin"]; }- (IBAction)click:(id)sender {UIButton *button = (UIButton*)sender;//登陸按鈕if (button.tag == OK_BUTTON){//[[info getInfo] initDic];//初始化dic,包含了admin賬號NSString *path = @"Users/zl201/Desktop/dic.xml";NSMutableDictionary *dicc = [NSMutableDictionary dictionaryWithContentsOfFile:path];NSLog(@"文件讀取成功");NSLog(@"%@",dicc);//如果為空if([self.txtName.text isEqualToString:@""]||[self.txtpassword.text isEqualToString:@""]||[self.txtConfirmPassword.text isEqualToString:@""]){UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"輸入不能為空" delegate:nil cancelButtonTitle:@"重試" otherButtonTitles:nil];[a show];}else{//檢測注冊是是否是郵箱if ([[info getInfo] isValidateEmail:self.txtName.text]) {[self.txtName resignFirstResponder];[self.txtpassword resignFirstResponder];[self.txtConfirmPassword resignFirstResponder];//看是否包含某個鍵if ([[dicc allKeys] containsObject:self.txtName.text]) {UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"該用戶已經(jīng)存在,請重新注冊新用戶名!" delegate:nil cancelButtonTitle:@"重試" otherButtonTitles:nil];[a show];self.txtName.text = @"";self.txtpassword.text = @"";self.txtConfirmPassword.text = @"";}else{//查看是否兩次密碼不一樣if (![self.txtConfirmPassword.text isEqualToString:self.txtpassword.text]) {UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"兩次輸入密碼不一樣" delegate:nil cancelButtonTitle:@"重試" otherButtonTitles:nil];[a show];self.txtConfirmPassword.text = @"";}//注冊成功else{UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"" message:@"恭喜注冊成功,請點擊返回登陸界面按鈕!" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles:nil];[a show];[info getInfo].name = self.txtName.text;[info getInfo].password = self.txtpassword.text;NSLog(@"%@,%@",[info getInfo].name,[info getInfo].password);//寫入文件[self.dic setObject:self.txtpassword.text forKey:self.txtName.text];NSLog(@"%@",self.dic);NSString *path = @"Users/zl201/Desktop/dic.xml";[self.dic writeToFile:path atomically:YES];NSLog(@"文件寫入成功");self.txtConfirmPassword.text = @"";self.txtpassword.text = @"";self.txtName.text = @"";}}}else //不是郵箱{UIAlertView *aa = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"用戶名必須是郵箱" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil];[aa show];}}}//取消按鈕else if (button.tag == CANCEL_BUTTON){self.txtName.text = @"";self.txtpassword.text = @"";self.txtConfirmPassword.text = @"";[self.txtName resignFirstResponder];[self.txtpassword resignFirstResponder];[self.txtConfirmPassword resignFirstResponder];}//面板觸發(fā)退出鍵盤else if(button.tag == BOARD){[self.txtName resignFirstResponder];[self.txtpassword resignFirstResponder];[self.txtConfirmPassword resignFirstResponder];}//返回登陸界面else if(button.tag == RETURN_BUTTON){[self.loginView.view removeFromSuperview];self.loginView = [[[LoginViewController alloc]initWithNibName:@"LoginViewController"bundle:nil]autorelease];[self.view insertSubview:self.loginView.view atIndex:10];} } - (void)dealloc {[_txtName release];[_txtpassword release];[_txtConfirmPassword release];[_dic release];[super dealloc]; } @end
登陸View
?
LoginViewController.h:
?
#import <UIKit/UIKit.h> @class RegistViewController; @class SecondViewController; @interface LoginViewController : UIViewController @property (retain, nonatomic) IBOutlet UITextField *txtName; @property (retain, nonatomic) IBOutlet UITextField *txtPassword; @property (retain,nonatomic)RegistViewController *registView; @property(retain,nonatomic)SecondViewController *secondView; - (IBAction)click:(id)sender; //接受保存當前登陸的賬戶和密碼 @property(retain,nonatomic) NSString *name; @property(retain,nonatomic) NSString *password; @end
LoginViewController.m:
?
?
#import "LoginViewController.h" #import "info.h" #import "RegistViewController.h" #import "SecondViewController.h" #define OK_BUTTON 0 //登陸按鈕 #define CANCEL_BUTTON 1 //退出系統(tǒng) #define BOARD 2 //鍵盤點擊 #define RESIGN_BUTTON 3 //注銷按鈕 #define REGISTER_BUTTON 4 //注冊按鈕 @interface LoginViewController ()@end@implementation LoginViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self; }- (void)viewDidLoad {[super viewDidLoad]; }-(void)viewDidAppear:(BOOL)animated {NSLog(@"%@",[info getInfo].name);NSLog(@"%@",[info getInfo].password);if ([info getInfo].name != NULL&&[info getInfo].password != NULL) {self.txtName.text = [info getInfo].name;self.txtPassword.text = [info getInfo].password;} }- (void)dealloc {[_txtName release];[_txtPassword release];[_registView release];[_secondView release];[_name release];[_password release];[super dealloc]; } - (IBAction)click:(id)sender {UIButton *button = (UIButton*)sender;//登陸按鈕if (button.tag == OK_BUTTON){[self.txtName resignFirstResponder];[self.txtPassword resignFirstResponder];//讀取xml文件NSString *path = @"Users/zl201/Desktop/dic.xml";NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithContentsOfFile:path];NSLog(@"文件讀取成功");NSLog(@"%@",dic);NSString *s =[dic objectForKey:self.txtName.text];if ([s isEqualToString:self.txtPassword.text]) {[info getInfo].name = self.txtName.text;[info getInfo].password=self.txtPassword.text;UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"登陸狀態(tài)" message:@"恭喜登陸成功" delegate:nil cancelButtonTitle:@"確認" otherButtonTitles:nil];[a show];}else{UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"登陸狀態(tài)" message:@"登陸失敗" delegate:nil cancelButtonTitle:@"重試" otherButtonTitles:nil];[a show];self.txtName.text = @"";self.txtPassword.text = @"";}}//系統(tǒng)退出else if (button.tag == CANCEL_BUTTON){exit(0);}//面板觸發(fā)退出鍵盤else if(button.tag == BOARD){[self.txtName resignFirstResponder];[self.txtPassword resignFirstResponder];}//注銷按鈕else if(button.tag == RESIGN_BUTTON){[info getInfo].name=@"";[info getInfo].password=@"";self.txtName.text = @"";self.txtPassword.text = @"";[self.txtName resignFirstResponder];[self.txtPassword resignFirstResponder];}//注冊按鈕else if(button.tag == REGISTER_BUTTON){[self.registView.view removeFromSuperview];self.registView = [[[RegistViewController alloc]initWithNibName:@"RegistViewController" bundle:nil]autorelease];[self.view insertSubview:self.registView.view atIndex:10];} } @end
抽獎view
?
ViewController.h:
?
#import <UIKit/UIKit.h> @class ShowViewController; @interface SecondViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate> @property (retain, nonatomic) IBOutlet UIPickerView *picker; - (IBAction)click:(id)sender; - (IBAction)OK:(id)sender; @property(nonatomic,retain)NSArray *images; @property(nonatomic,retain)NSArray *column1; @property(nonatomic,retain)NSArray *column2; @property(nonatomic,retain)NSArray *column3; @property(nonatomic,retain)NSArray *column4; @property(nonatomic,retain)NSArray *column5; @property(nonatomic,assign)long num; @property (retain, nonatomic) IBOutlet UILabel *lblShow; @property(nonatomic,retain)ShowViewController *showView; @property(nonatomic,retain)NSMutableArray *array;//記錄分數(shù) @end
ViewController.m:
?
?
#import "SecondViewController.h" #import <AudioToolbox/AudioToolbox.h> #import "info.h" @interface SecondViewController ()@end@implementation SecondViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self; }- (void)viewDidLoad {[super viewDidLoad];self.array = [[NSMutableArray alloc] init];UIImage *image1 = [UIImage imageNamed:@"apple.png"];UIImage *image2 = [UIImage imageNamed:@"bar.png"];UIImage *image3 = [UIImage imageNamed:@"cherry.png"];UIImage *image4 = [UIImage imageNamed:@"crown.png"];UIImage *image5 = [UIImage imageNamed:@"lemon.png"];UIImage *image6 = [UIImage imageNamed:@"seven.png"];self.images = @[image1,image2,image3,image4,image5,image6];//創(chuàng)建30個ImageViewfor (int i=0; i<5; i++) {UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image1];UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image2];UIImageView *imageView3 = [[UIImageView alloc] initWithImage:image3];UIImageView *imageView4 = [[UIImageView alloc] initWithImage:image4];UIImageView *imageView5 = [[UIImageView alloc] initWithImage:image5];UIImageView *imageView6 = [[UIImageView alloc] initWithImage:image6];NSArray *arr = @[imageView1,imageView2,imageView3,imageView4,imageView5,imageView6];NSString *str = [NSString stringWithFormat:@"column%d",i+1];//OC特有方法,對一個可能存在可能不存在的變量賦值,本來是一個變量,可以轉(zhuǎn)化成字符串,這樣就可以改變字符串了[self setValue:arr forKey:str]; //KVC[imageView1 release];[imageView2 release];[imageView3 release];[imageView4 release];[imageView5 release];[imageView6 release];}srandom(time(NULL));//默認選擇在第5000行for (int i=0; i<5; i++) {[self.picker selectRow:5000 inComponent:i animated:NO];}}-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {return 5; }-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {return [self.images count]*10000; }-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {//這種寫法非常消耗內(nèi)存// UIImageView *imageView = [[UIImage alloc] initWithImage:[self.images objectAtIndex:row]];// return imageView;NSString * str = [NSString stringWithFormat:@"column%d",component+1];NSArray *arr = [self valueForKey:str];return [arr objectAtIndex:row%6];}- (void)dealloc {[_picker release];[_images release];[_column1 release];[_column2 release];[_column3 release];[_column4 release];[_column5 release];[_showView release];[_lblShow release];[super dealloc]; } //退出 - (IBAction)click:(id)sender {// NSLog(@"%@",srandom(time(nil)));exit(0); } //確定 - (IBAction)OK:(id)sender {int a[5];bool f=false;for (int i=0; i<5; i++) {int row = random() % [self.column1 count];int n = random() % 35;int j = row *n;[self.picker selectRow:j inComponent:i animated:YES];a[i]=j%6;}int sum=0;for (int i=0; i<5; i++){sum = 1;if (f==false){for (int j=i+1; j<5; j++){if (a[i] == a[j]){sum++;}if (sum>=3){f=true;break;}}}else{break;}}if (f) { // UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"我中了" message:@"中了500萬" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil]; // [a show];//[self playMusic:@"win"];//調(diào)用播放音樂}[self playMusic:@"crunch"];self.num = a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];[info getInfo].number = self.num;NSLog(@"%d",self.num);NSLog(@"%@",[info getInfo].name);//self.lblScore.text = [NSString stringWithFormat:"當前得分:%d",self.num];self.lblShow.text = @"";NSLog(@"%@",[info getInfo].name);if ([info getInfo].name!=NULL&&self.num>=4000) {NSString *str = [NSString stringWithFormat:@"恭喜%@獲得%d的高分上榜了",[info getInfo].name,self.num];self.lblShow.text = str;CGSize size = [self.lblShow.text sizeWithFont:self.lblShow.font];CGRect frame = CGRectMake(self.lblShow.frame.origin.x, self.lblShow.frame.origin.y, size.width, self.lblShow.frame.size.height);self.lblShow.frame = frame;NSLog(@"恭喜獲得4000以上的高分");[self.array addObject:[NSString stringWithFormat:@"%@ %d",[info getInfo].name,self.num]];NSLog(@"%@",self.array);NSString *path = @"Users/zl201/Desktop/array.xml";[self.array writeToFile:path atomically:YES];NSLog(@"文件寫入成功");}else if ([info getInfo].name!=NULL&&self.num<4000){NSString *str = [NSString stringWithFormat:@"%@,很遺憾只有%d分,不足4000,加油",[info getInfo].name,self.num];self.lblShow.text = str;CGSize size = [self.lblShow.text sizeWithFont:self.lblShow.font];CGRect frame = CGRectMake(self.lblShow.frame.origin.x, self.lblShow.frame.origin.y, size.width, self.lblShow.frame.size.height);self.lblShow.frame = frame;} }-(void)playMusic:(NSString*)s {//通過NSBundle來獲得音頻文件的url地址NSURL *url = [[NSBundle mainBundle] URLForResource:s withExtension:@"wav"];SystemSoundID winSound;//整形類型的id//用音頻服務(wù),為音頻文件綁定soundIDAudioServicesCreateSystemSoundID((CFURLRef)url, &winSound);//通過綁定的soundId來播放音樂AudioServicesPlayAlertSound(winSound); }@end
排行榜View
?
ShowViewController.h:
?
#import <UIKit/UIKit.h> @class SecondViewController; @interface ShowViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> @property (retain, nonatomic) IBOutlet UITableView *tableView; @property(nonatomic,retain)NSMutableArray *array;//加上頭行顯示給tableView @property(nonatomic,retain)NSMutableArray *array1;//記錄分數(shù) @property(nonatomic,retain)SecondViewController *secView; @end
ShowViewController.m:
?
?
#import "ShowViewController.h" #import "SecondViewController.h" @interface ShowViewController ()@end@implementation ShowViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self; }- (void)viewDidLoad {[super viewDidLoad];NSString *path = @"Users/zl201/Desktop/array.xml";self.array1 = [NSArray arrayWithContentsOfFile:path];NSLog(@"文件讀入成功");NSLog(@"%@",self.array1);[self.array1 sortUsingSelector:@selector(compare:options:)]; //如何倒序NSLog(@"%@",self.array1);self.array = [NSMutableArray arrayWithObject:@"積分排行榜(>=4000):"];[self.array addObjectsFromArray:self.array1];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 1; }- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return [self.array count]; }- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *MyIdentifier = @"MyIdentifier";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];}NSString *titleStr = [self.array objectAtIndex:indexPath.row];cell.textLabel.text = titleStr;return cell; }-(void)dealloc {[_array release];[_tableView release];[super dealloc]; }@end?
?
轉(zhuǎn)載于:https://www.cnblogs.com/james1207/p/3266697.html
總結(jié)
以上是生活随笔為你收集整理的IOS登陆+注册+抽奖+排行榜的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。