posted by 프띠버리 2013. 9. 11. 06:54

 

 

ViewController.h


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource, UIWebViewDelegate>

{

    // 텍스트 필드 변수 선언

    IBOutlet UITextField *contextTextField;

    // 테이블용 변수 선언

    IBOutlet UITableView *table;

    // 유동성 배열 변수 선언

    NSMutableArray *data;

    // url저장할 문자열 변수 선언

    NSString *urlStr;

}

// 웹뷰용 변수 선언

@property (weak, nonatomic) IBOutlet UIWebView *webView;

 

// 테이블에 셀의 내용 추가할 메소드
- (IBAction)addItem:(id)sender;

// 테이블 수정 모드로 전환할때 메소드

- (IBAction)toggleEditMode:(id)sender;



@end



ViewController.m

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController

// 섹션구분을 위해 CELL_ID란 이름을 정의

#define CELL_ID @"CELL_ID"

 

// 테이블의 섹션 개수

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

    // 섹션 개수는 1개

    return 1;

}

 

// 테이블 섹션의 셀 개수

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

    // 셀 개수는 data라는 배열안의 개수 만큼 표시

    return [data count];

}

 

// 테이블의 내용이 있는 셀을 선택했을때
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    // urlStr이라는 문자열 변수에 현재 선택한 셀의 텍스트를 저장한다.

    urlStr = [data objectAtIndex:indexPath.row];

    NSLog(@"%@", urlStr);

    // url형식을 가지는 변수에 urlStr의 내용을 넣어서 웹뷰에서 쓸수 있게 한다.

    NSURL *url = [NSURL URLWithString:urlStr];

    // 웹뷰의 URL에 url변수의 주소를 집어 넣음

    NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];

    // 웹뷰에 현재 url이 가리키는 주소의 웹페이지를 화면에 보여준다.

    [self.webView loadRequest:requestURL];

    

}

 

// 테이블 셀 안에 내용 집어넣기

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    // cell은 CELL_ID라는 이름을 가지는 테이블 셀형식이다.

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];

    // 표시할 내용을 가진 셀이 없으면

    if(nil == cell)

    {

        // cell은 CELL_ID라는 이름을 가진 기본 형태의 셀로 초기화됨

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_ID];

    }

    // 각 셀의 텍스는 data라는 배열안의 내용을 넣어준다. 

    cell.textLabel.text = [data objectAtIndex:indexPath.row];

    // 셀을 반환하여 각 셀이 내용을 가지게 된다.

    return cell;

}


// 수정

- (void)tableView:(UITableView *)tableview commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 테이블이 수정(셀 지우기) 모드일때

    if(editingStyle == UITableViewCellEditingStyleDelete)

    {

        // data배열에서 현재 선택된 셀의 내용을 지움

        [data removeObjectAtIndex:indexPath.row];

        // 테이블 다시 보여주기

        [table reloadData];

    }

}


// 이동

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath

{

    // 셀이 하나 지워지면 위치를 이동한다.

    return YES;

}


// 이동 -> 데이터 적용(좀더 이해가 필요함)

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

{

    // 오브젝트형 obj변수에 data 배열의 현재 선택된 부분 저장

    NSObject *obj = [data objectAtIndex:sourceIndexPath.row];

    // data 배열에서 현재 선택된 부분 삭제

    [data removeObjectAtIndex:sourceIndexPath.row];

    // data 배열에 obj에 저장된 내용을 삽입

    [data insertObject:obj atIndex:destinationIndexPath.row];

    NSLog(@"data : %@", data);

}


// 키보드

- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

    // 기본적으로 프로그램이 실행되면 포커스는 텍스트 필드에 맞춰짐

    [textField resignFirstResponder];

    // additem메소드 호출

    [self addItem:nil];

    // 키패드 자동으로 내려가기

    return YES;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    // 웹뷰 델리게이트

    self.webView.delegate = self;

    // 텍스트필드 델리게이트

    contextTextField.delegate = self;

    // data를 유동형 배열로 초기화

    data = [[NSMutableArray alloc] init];

}


// 데이터 추가

- (IBAction)addItem:(id)sender

{

    // 문자열 변수 inputStr은 현재 입력된 텍스트 필드의 내용을 저장한다.

    NSString *inputStr = contextTextField.text;

    // inputStr 문자열의 길이가 0 보다 클때만(즉, 하나의 내용이라도 들어가 있을때만)

    if([inputStr length] > 0)

    {

        // data 배열에 현재 택스트 필드에 입력했던 내용을 추가

        [data addObject:inputStr];

        // 테이블 다시보여주기

        [table reloadData];

        // 텍스프 필드 공란으로 초기화

        contextTextField.text = @"";

    }

}


// 편집/완료 상태 토글식 동작

- (IBAction)toggleEditMode:(id)sender

{

    // 테이블이 수정모드면 비수정 상태로

    table.editing = !table.editing;

    // 버튼의 제목은 수정모드일때 Done를 표시 아니면 Edit를 표시

    ((UIBarButtonItem *)sender).title = table.editing ? @"Done" : @"Edit";

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




 

'Programing > IOS' 카테고리의 다른 글

뷰티 오브 코리아 앱 소스  (0) 2013.09.16
테이블 셀 커스텀 디자인  (0) 2013.09.13
카드 짝 맞추기 게임  (0) 2013.08.29
Slider 및 TextField 및 OnOff 스위치 연습  (0) 2013.08.26
TableView 연습 코딩  (0) 2013.08.26
posted by 프띠버리 2013. 8. 29. 12:49



ViewController.h

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController

{

    UIButton *prevBtn;              // 이전 버튼

    UILabel *life;                  // 생명 텍스트

}


// 현재 버튼

@property(strongnonatomicUIButton *button;

// 카드 앞면 들어갈 배열

@property(strongnonatomicNSMutableArray *frontCard;


// 액션 메소드(프로그램에서 클릭시 구동되는 시작 메소드)

- (IBAction)action:(id)sender;


@end





ViewController.m

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController

@synthesize button;             // 지금 버튼 선언

@synthesize frontCard;          // 카드 배열 선언

int count;                      // 카드 클릭 카운터 변수 선언

int chkImg;                     // 이전 클릭된 이미지를 정수로 입력받을 변수 선언

int succes;                     // 성공 횟수 변수 선언

int intvalCount;                // 오버 횟수 클릭시 처리할 변수 선언

int fail;                       // 실패 횟수 변수 선언


// 초기 화면

- (void)viewDidLoad

{

    // 초기화 메소드 불러오기

    [self initScreen];

    

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


// 초기화 메소드

-(void)initScreen

{

    // 화면 전체 클리어

    for(UIView *subview in [self.view subviews])

    {

         [subview removeFromSuperview];

    }

    

    // 버튼을 그리기 위한 for문용 변수 i, j  생성되는 버튼에 태그숫자를 붙여줄 변수 선언

    int i, j, tagNum;


    //  변수 초기화

    succes = 0;

    intvalCount = 0;

    fail = 0;

    count = 0;

    chkImg = 0;

    

    // 유동성 배열을 생성하여 초기 값을 집어 넣음

    frontCard = [[NSMutableArray allocinitWithObjects:@"1"@"1"@"2"@"2"@"3"@"3"@"4"@"4"@"5"@"5"@"6"@"6"@"7"@"7"@"8"@"8"nil];

    

    // 유동성 배열의 내용을 섞어 주는 메소드 호출

    [self shuffle];

    

    // 버튼의 태그 수를 0으로 지정

    tagNum = 0;

    

    // 제일 상단 제목 레이블로 만들기

    UILabel *label = [[UILabel allocinit];            // label이란 레이블 변수 생성

    label.frame = CGRectMake(801516020);          // 가로 80 세로 15 위치에서 가로 160, 세로 20크기의 레이블 생성

    label.text = @"카드  맞추기 게임";                     // 레이블안에 들어갈 텍스트 내용

    label.font = [UIFont systemFontOfSize:20.0];        // 레이블에 적용된 텍스트의 크기

    [self.view addSubview:label];                       // 레이블 화면에 보여주기


    // 제일 하단에 생명 하트 표시를 레이블을 이용해 텍스트로 표시

    life = [[UILabel allocinit];

    life.frame = CGRectMake(1535030040);

    life.font = [UIFont systemFontOfSize:25];

    life.text = @"생명 : ♡ ♡ ♡ ♡ ♡ ♡ ♡ ♡";

    [self.view addSubview:life];


    // 16개의 버튼 생성 하기

    for(i=0;i<4;i++)                        // 4줄로 만듬

    {

        for(j=0;j<4;j++)                    // 한줄에 4개씩 만듬

        {

            // 버튼에 이미지를 입히기 위해 커스텀 타입으로 생성

            button  = [UIButton buttonWithType:UIButtonTypeCustom];

            // 버튼의 위치를 for문을 이용하여 만듬

            button.frame = CGRectMake(15+(j*75), 50+(i*75), 6565);

            // 버튼이 생성될때 마다 태그의 값을 1 증가시킴

            tagNum += 1;

            // 버튼 태그의 값에 1 증가된 값을 집어 넣음

            button.tag = tagNum;

            // 버튼의 이미지는 backcard.jpg이고 효과는 없음

            [button setImage:[UIImage imageNamed:@"backcard.jpg"forState:UIControlStateNormal];

            // 버튼을 클릭시 sction:메소드를 실행

            [button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];

            // 버튼을 화면에 보여줌

            [self.view addSubview:button];

        }

    }

    

    // 개발자요 버튼 위치 확인 부분

    for(i=0;i<16;i++)

    {

        NSLog(@"%@"frontCard[i]);

    }

}


// Mutable 배열 섞기

int randomSort(id obj1, id obj2, void*context)

{

    return (arc4random()%3 - 1);

}


- (void)shuffle

{

    [frontCard sortUsingFunction:randomSort context:nil];

}

//------------ 여기까지 배열 섞기 고정 메소드


// 버튼 클릭시 호출 되는 action: 메소드

- (IBAction)action:(id)sender

{

    // 버튼의 클릭횟수가 2보다 작을때

    if(intvalCount < 2)

    {

        // 버튼의 태그값을 알랴줌

        button = sender;

        // 버튼의 태그값에 맞춰서 체크하는 메소드 호출

        [self checkCard];

        // 1초의 대기 시간동안 클릭횟수가 2 넘어가지 않으면 intvalCtn 메소드를 호출

        [self performSelector:@selector(intvalCtn) withObject:nil afterDelay:1.0];


    }

    // 버튼의 클릭횟수가 2이상이 된다면

    else

    {

        // 경고창 호출

        UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"경고" message:@"2번만 클릭 가능합니다" delegate:self cancelButtonTitle:@"확인" otherButtonTitles:nilnil];

        [alert show];

        // 클릭횟수 변수 초기화

        intvalCount = 0;

    }

    // 클릭횟수 변수 1증가

    intvalCount += 1;

}


// 버튼의 클릭횟수가 2 넘어가지 않을때 호출되는 메소드

- (void) intvalCtn

{

    // 클릭횟수 변수 초기화

    intvalCount = 0;

}


// 클릭한 카드 2개를 비교하여 같은지 아닌지  에러 부분 체크 하는 메소드

- (void) checkCard

{

    

    // 버튼 클릭시 뒤집어 질때 태그와 배열의 값에 맞춰서 앞면 이미지 표시

    NSString *imageName = [NSString stringWithFormat:@"frontcard0%@.jpg"frontCard[button.tag-1]];

    [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];

    

    // 처음 버튼 클릭시

    if(count == 0)

    {

        // 이전 이미지용 변수에 지금 클릭된 이미지의 태그값에 해당하는 이미지 번호를 정수화 하여 저장

        chkImg = [frontCard[button.tag-1intValue];

        // 이전 버튼에 현재의 버튼을 저장

        prevBtn = button;

        // 두번째 클릭을 위해 카운터 1증가

        count = count + 1;

        // 뒤집힌 카드가 다시 클릭되는것을 방지하기 위해 현재의 버튼 비활성화

        button.enabled = NO;


    }

    // 두번째 버튼 클릭시

    else if(count == 1)

    {

        // 처음 카드와 두번째 카드의 이미지 번호가 같다면

        if([frontCard[button.tag-1intValue] == chkImg)

        {

            // 성공횟수 1증가

            succes = succes + 1;

            // 카드 클릭 카운터 변수 초기화

            count = 0;

            // 이제  카드가 클릭되면 안됨으로 둘다 비활성화

            prevBtn.enabled = NO;

            button.enabled = NO;

            

            // 모든 카드가  맞았을때

            if(succes == 8)

            {

                // 게임종료 경고창 호출

                UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"VICTORY" message:@"클리어를 축하합니다." delegate:self cancelButtonTitle:@"메인으로" otherButtonTitles:@"다시하기"nil];

                [alert show];

                // 성공 횟수 초기화

                succes = 0;

            }

        }

        // 처음 카드와 두번째 카드의 이미지 번호가 다르다면

        else

        {

            // 이전 버튼을 클릭할수 있도록 활성화

            prevBtn.enabled = YES;

            // 실패 횟수 증가

            fail = fail + 1;

            

            // 뒤집힌 카드를 확인 하기 위해 0.5초후에 다시 뒷면으로 뒤집히게 

            [self performSelector:@selector(delayImg) withObject:nil afterDelay:0.5];

            

            // 실패 횟수에 따른 하트 감소 레이블 텍스트 표시

            if(fail == 1)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡ ♡ ♡ ♡ ♡ ♡";


            }

            else if(fail == 2)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡ ♡ ♡ ♡ ♡";

            }

            else if(fail == 3)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡ ♡ ♡ ♡";

            }

            else if(fail == 4)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡ ♡ ♡";

            }

            else if(fail == 5)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡ ♡";

            }

            else if(fail == 6)

            {

                life.text = @"";

                life.text = @"생명 : ♡ ♡";

            }

            else if(fail == 7)

            {

                life.text = @"";

                life.text = @"생명 : ♡";

            }

            // 하트가  떨어지면

            else if(fail == 8)

            {

                life.text = @"";

                

                // 게임 실패 경고창 호출

                UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"LOSE" message:@"실패하였습니다." delegate:self cancelButtonTitle:@"메인으로" otherButtonTitles:@"다시하기"nil];

                [alert show];

                // 실패 횟수 0으로 초기화

                fail = 0;

            }

            

            //  클릭 카운터 변수 초기화

            count = 0;

        }

    }

}


// 0.5초후 뒷면 보여줄 메소드

- (void)delayImg

{

    // 이전 버튼의 이미지를 다시 뒷면이 되게 

    [prevBtn setImage:[UIImage imageNamed:@"backcard.jpg"forState:UIControlStateNormal];

    // 지금 버튼의 이미지를 다시 뒷면이 되게 

    [button setImage:[UIImage imageNamed:@"backcard.jpg"forState:UIControlStateNormal];

}


// 경고창 반응

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    // 다시하기를 클릭했을때

    if(buttonIndex == alertView.firstOtherButtonIndex)

    {

        // 게임 내용 다시 초기화

        [self initScreen];

    }

}


@end



posted by 프띠버리 2013. 8. 26. 18:38




AppDelegate.h


#import <UIKit/UIKit.h>


@class ViewController;


@interface AppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;


@property (strong, nonatomic) ViewController *viewController;


@end



AppDelegate.m

#import "AppDelegate.h"


#import "ViewController.h"


@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

}



ViewController.h

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController <UITextFieldDelegate>

{

    IBOutlet UILabel *label;

    IBOutlet UISlider *redSlider;

    IBOutlet UISlider *blueSlider;

    IBOutlet UISlider *greenSlider;

    IBOutlet UITextField *userInputField;

    IBOutlet UIView *colorView;

    UIActivityIndicatorView *activityIndicator;

}

- (IBAction)onColorSliderChanged:(id)sender;

- (IBAction)powerOnOff:(id)sender;


@end



ViewController.m

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

    activityIndicator.center = self.view.center;

    [self.view addSubview:activityIndicator];

    [activityIndicator stopAnimating];

    

//    [redSlider setThumbImage:[UIImage imageNamed:@"red.png"] forState:UIControlStateNormal];

//    [greenSlider setThumbImage:[UIImage imageNamed:@"green.png"] forState:UIControlStateNormal];

//    [blueSlider setThumbImage:[UIImage imageNamed:@"blue.png"] forState:UIControlStateNormal];

    

    [self onColorSliderChanged:nil];

}


- (IBAction)onColorSliderChanged:(id)sender

{

    if([activityIndicator isAnimating])

    {

        [activityIndicator stopAnimating];

    }

    colorView.backgroundColor = [UIColor colorWithRed:(float)redSlider.value/255.0f green:(float)greenSlider.value/255.0f blue:(float)blueSlider.value/255.0f alpha:1.0];

    

}


- (IBAction)powerOnOff:(id)sender

{

    BOOL isOn = ((UISwitch *)sender).on;

    redSlider.enabled = isOn;

    greenSlider.enabled = isOn;

    blueSlider.enabled = isOn;

    

    if(isOn)

    {

        [activityIndicator startAnimating];

        [self performSelector:@selector(onColorSliderChanged:) withObject:nil afterDelay:1.0];

    }

    else

    {

        colorView.backgroundColor = [UIColor grayColor];

    }

}


- (BOOL)textFieldShouldReturn:(UITextField *)textField

{

    label.text = userInputField.text;

    [userInputField resignFirstResponder];

    return YES;

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end




TextSliderTest.zip



슬라이더 바를 이용해서 레벨 색상 조정 및 텍스트 필드에서 입력받은 내용 레벨에 보여주기.

온오프 스위치로 활성, 비활성 선택


'Programing > IOS' 카테고리의 다른 글

테이블뷰에 웹뷰가 포함된 소스  (0) 2013.09.11
카드 짝 맞추기 게임  (0) 2013.08.29
TableView 연습 코딩  (0) 2013.08.26
기본 MP3 플레이어 기능 어플  (0) 2013.08.21
숫자야구 게임으로 앱 흉내내기  (0) 2013.08.20