iPhone 계산기만들기(2)

2011. 12. 6. 20:54제2외국어/iOS

조금 느린 2회. (제사 지내고 오느라..)


일단 사용된 여러가지 함수를 나열하겠습니다.


문자열에 관련된 NSString


[ 문자열 비교 하기 ]

[showResult.text isEqualToString:@"0"] // showResult.text 가 0과 같은가?


[ 문자열에 덧붙이기 ]

showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];

// showResult 에 pressed.titleLabel.text (눌러져있는 있는 버튼의 라벨 붙이기)


[ 문자열에 자르기 ]

showResult.text = [showResult.text substringWithRange:(NSRange){0,length}];

length 는 문자열의 길이에 -1 한 값임니다. 이 예제는 Del키 눌렀을 때 마지막 글자만 지울 때 사용되었습니다.


[ 문자열에 마지막 문자 알아내기 ]

NSString *temp =[showResult.text substringFromIndex:length-1];


[ 문자열에서 필터링하기 ] 

이 부분은 그냥 예제를 그대로 보여드리겠습니다.


NSCharacterSet *filter=[NSCharacterSetcharacterSetWithCharactersInString:@"+-*/"];

NSCharacterSet 형을 만들어서 필터링할 것 들을 넣어주고 

' 사용된 이유는 계산할 수식에서 문자(숫자)와 연산자를 분리하기 위해 사용했습니다.


NSArray *result_temp = [temp componentsSeparatedByCharactersInSet: filter];


NSNumber *intarr;

    for(intarr in result_temp)

    {

        st_num[nP++]=intarr;

  NSLog(@"%@ %@",intarr,st_op[nP]);    

    }


실제 사용된 소스입니다. 참고용도..


[ 문자열을 double형으로 변환하기  ] 

[st_num[ key ] doubleValue] ;


' int 형은 intValue 라는걸 유추할 수 있겠습니다.


[ 문자열에 숫자(int,float,double 형등) 을 넣기  ] 

st_num[ key ] = [ NSString stringWithFormat:@"%lf",outcome];




대충 함수는 정리된 것 같습니다.


본론으로 넘어가서


Calculator.h 에 사용할 변수와 액션들을 선언해줍니다.


UITextField *showResult; // 수식을 저장하고 있는 

UITextField *Result;     // 계산한 값을 출력하는


outlet과 연결하기 위해서 

@property (nonatomic, retain) IBOutlet UITextField *Result;

@property (nonatomicretainIBOutlet UITextField *showResult;

는 해줍시다.


' .h에 선언한 property들은 .m에서 @synthesize로 반드시 선언해주어야 합니다.

ex) @synthesize showResult,Result;



그리고 각 버튼을 눌렀을 때 사용되는 액션들 입니다.


-(IBAction)pressedNumber:(id)sender;

-(IBAction)pressedCalculate:(id)sender;

-(IBAction)pressedClear:(id)sender;

-(IBAction)pressedDel:(id)sender;

-(IBAction)pressedResult:(id)sender;

-(IBAction)pressedPoint:(id)sender;


보시다 시피

각 숫자를 눌렀을 때

연산자를 눌렀을 때

C (clear)를 눌렀을 때

Del 키 를 눌럿을 때

= 키를 눌렀을 때

. 키를 눌렀을 때 가 되겠습니다.


솔직히 모든 키를 하나의 액션에 넣은다음 if문을 통해서 구분을 지어도 되는데 

무엇이 더 귀찮을 지는 해보시면 앏니다.


그러면 Command+s로 저장을 한번 누르고 xib에서 연결을 하겟습니다.




먼저 각 버튼에 대해서 File's Owner와 연결을 합니다

각 버튼을 ctrl 키를 누른 상태에서 File's Owner를 연결하고 버튼에 맞는 액션과 연결을 해주시면 됩니다.




그리고 나서 @property로 선언한 아웃렛과 연결을 하겠습니다


전에 한거랑은 반대로 ctrl 키를 누른 상태에서 선언한 UITextField 들을 연결해주시면 됩니다.




연결이 잘 되었는지 확인하는 방법은

.m 파일에서 각 액션들을 정의해 주어서

NSLog 로 확인하시면 됩니다.