2011-09-04 3 views
0

아이폰의 암호를 뽑을 수있는 대화 상자를 모방하고 싶습니다. 나는 네 개의 레이블을 만들었고 사용자가 네 번째 숫자를 입력 한 후에 그 정확성을 검사합니다. 맞으면 대화 상자를 닫습니다. 올바르지 않으면 입력 상자를 지우고 사용자가 다시 시도하도록합니다. 버튼을 누를 때 updateText으로 전화합니다.재설정하기 전에 비밀번호 라벨을 업데이트하는 방법은 무엇입니까?

- (void) updateText{ 

pw1.text = [self.enteredPwd objectAtIndex:0]; 
pw2.text = [self.enteredPwd objectAtIndex:1]; 
pw3.text = [self.enteredPwd objectAtIndex:2]; 
pw4.text = [self.enteredPwd objectAtIndex:3]; 

if (currentIndex > 3) { 
    // check pwd 
    [self checkPwd]; 
} 
} 
- (IBAction)pwBtnUp:(id)sender { 

UIButton *btn = (UIButton*)sender; 

[self.enteredPwd insertObject:[NSString stringWithFormat:@"%d", btn.tag] atIndex:currentIndex++]; 
[self updateText]; 
} 

하지만 문제가 하나 있습니다. 네 번째 캐릭터는 표시 할 기회가 없습니다. 정답이든 아니든, 마지막 버튼을 두드린 직후 대화 상자는 사라지거나 지워집니다.

나는 이것을 고치는 방법을 모른다. 나는 심지어 UIView Animation의 레이블을 checkPwd와 함께 완료 블록에서 호출하려고 시도했지만 행운은 없습니다.

이 문제를 해결하는 방법을 알려주세요. 사과의 대화 상자에는 라벨을 지우기 전에 약 0.5 초 가량 멈 춥니 다.

감사

레오

답변

1

당신은 단지 NSTimer 또는 지연 후 실행 선택기를 사용 할 수 없습니다? pwBtnUp이 사용자가 숫자를 두 드릴 때 호출되는 함수 인 경우 4 번째 숫자인지 확인한 다음 필드를 숨기거나 지우는 지연 후 함수를 수행하십시오.

+0

이 코드를 시도했지만 "인식 할 수없는 selector checkPwd"로 인해 충돌합니다. 나는 그것을 잘못 사용하고 있는가? 'NSTimer * checkPwdTimer = [NSTimer timerWithTimeInterval : .5 target : 셀렉터 : @selector (checkPwd :) userInfo : nil repeats : NO]; NSRunLoop * myRunLoop = [NSRunLoop currentRunLoop]; [myRunLoop addTimer : checkPwdTimer forMode : NSDefaultRunLoopMode];'암호 확인을위한'- (void) checkPwd'가 있습니다. – leo

+0

OK. @selector (checkPwd :)를 @selector (checkPwd)로 변경 한 후에 작동합니다. 나는 그 차이점을 모른다. 사과 설명서에는 메소드 이름 뒤에 콜론이 있습니다. – leo

+1

checkPwd 다음에 매개 변수가있는 경우 (호출자 (id) 보낸 사람과 함께 IBAction을 사용하는 경우) 호출 할 선택기에 매개 변수가 있음을 나타내는 콜론이 필요합니다. – LuckyLuke

1

오히려 NSTimer 그냥 지연을 삽입 사용하는 것보다 :

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

은 BTW, 코드가 약간 중복 보인다. 왜 새로운 버튼을 누를 때마다 모든 텍스트 필드/레이블을 업데이트합니까? 필드에 이미 문자가 포함되어 있으면 필요하지 않습니다. 하지만 아마도 그 점 옆에 있습니다.

관련 문제