开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

IOS登陆+注册+抽奖+排行榜

简介:
+关注继续查看

要求:三个页面(登录页面,pickerView页面,排行榜页面),pickerView页面是三个组件,每个组件显示0-9,点击按钮进行随机,获得的值存入排行榜,排行榜显示大于500的最高的10个分数和对应的用户名,切换页面可以用任何方法(0-9循环显示,登录注销[可以有不同的用户],判断用户名是否为邮箱[正则表达式])


说明:
1.要修改xml文件到当前系统桌面,dic.xml保存的是用户名和密码,array.xml是保存的积分榜
2.正则表达式用在注册页面,在注册用户的时候用户名需要经过正则表达式的验证,判断是否是邮箱
3.有一个默认的admin,admin账户
4.排行榜显示是用的tableView显示的


疑惑:
1.如何创建文件在当前项目下
2.为什么view之间传数组传不了,我知道数组要先初始化
3.数组排序,用内置的排序方法,compare:,从大到小用什么参数
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:@"该用户已经存在,请重新注册新用户名!" 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];     }     //面板触发退出键盘     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 //退出系统 #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:@"登陆状态" message:@"恭喜登陆成功" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles:nil];             [a show];                      }         else         {             UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"登陆状态" message:@"登陆失败" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil];             [a show];             self.txtName.text = @"";             self.txtPassword.text = @"";         }     }     //系统退出     else if (button.tag == CANCEL_BUTTON)     {         exit(0);     }     //面板触发退出键盘     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;//记录分数 @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];          //创建30个ImageView     for (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特有方法,对一个可能存在可能不存在的变量赋值,本来是一个变量,可以转化成字符串,这样就可以改变字符串了         [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 {     //这种写法非常消耗内存     //    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"];//调用播放音乐     }     [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     //用音频服务,为音频文件绑定soundID     AudioServicesCreateSystemSoundID((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;//记录分数 @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

















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366561,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发 - 千万不要把通知注册写在viewWillAppera里面
iOS开发 - 千万不要把通知注册写在viewWillAppera里面
0 0
iOS - Sign up/in 注册/登录
1、Sign up/in 1.1 用户登录安全原则 不能在网络上传输用户隐私数据的明文。 不能在本地和服务器上存储用户隐私数据的明文。 1.2 用户登录流程 登录成功之后,应该跳转视图控制器到主页。
825 0
iOS开发:下架App的步骤
首先登陆你的 iTunes Connect
0 0
2022 ios APP最新iOS开发上架测试教程
2022 ios APP最新iOS开发上架测试教程
0 0
[ios开发]-APP-上架流程
由于苹果的机制,在非越狱机器上安装必须通过官方的Appstore, 开发者开发好应用后上传Appstore,也需要通过审核等环节。 AppCan作为一个跨主流平台的一个开发平台,也对ipa包上传Appstore作了支持。 本文从三个流程来介绍如何实现AppCan在 线编译出ipa包,以及上传到苹果Appstore。
0 0
iOS开发之打包上传到App Store——(一)各种证书的理解
iOS开发之打包上传到App Store——(一)各种证书的理解
0 0
IOS APP开发:苹果app从开发到上架教程详解
IOS APP开发:苹果app从开发到上架教程详解
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
From Java_Android to Swift iOS
立即下载
深入剖析 iOS 性能优化
立即下载