要求:三個頁面(登陸頁面,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/5970243app
步驟:dom
註冊viewatom




RegistViewController.h:url
- #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:spa
登錄View.net


LoginViewController.h:component
- #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:orm
抽獎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