2009-07-31 5 views
1

2 차 방정식을 푸는 데 아주 간단한 iPhone 앱에서 작업하고 있습니다. 그 이유는 대부분 개념과 수학이 쉽기 때문입니다.becomeFirstResponder 키보드 설정을 준수하지 않습니다.

몇 개의 레이블, 3 개의 텍스트 필드 (varAfield 등) 및 Solve 버튼이있는 인터페이스 작성기에서 인터페이스 작성기를 작성했습니다. UITextFieldDelegate로 설정된 3 개의 텍스트 필드가 자동으로 "숫자 및 구두점"키보드를 표시하도록 설정되었습니다. 사용자가 어쨌든

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
if (theTextField == varAfield) { 
    [varAfield resignFirstResponder]; 
    [varBfield becomeFirstResponder]; 
} 
if (theTextField == varBfield) { 
    [varBfield resignFirstResponder]; 
    [varCfield becomeFirstResponder]; 
} 
if (theTextField == varCfield) { 
    [varCfield resignFirstResponder]; 
} 
return YES; 
} 

을 "완료"말한다 변수 C를 제외하고 "다음"을 말한다 리턴 키를 (탭 때 이 코드는 자동으로 다음 변수로 이동, 키보드를 기각하는 문제를 사용 becomeFirstResponder의 첫 번째 인스턴스와 함께 발생하지만 키보드는 "Numbers and Punctuation"대신 ASCII 키보드를 사용해야합니다. 두 번째로 호출 할 때 정상적으로 작동합니다. 또한 변수 A에서 시작하면 다시 잘 작동 할 것입니다. 아무리 어디서나 firstFirstResponder의 첫 번째 인스턴스를 이동해도 응용 프로그램 내에서 처음으로 호출 된 시간은 올바르게 동작하지 않으며 올바르게 동작하지 않습니다.

업데이트 : becomeFirstResponder는 여전히 (첫 번째 인스턴스에서조차도) 리턴 키의 선택을 존중하지만 어떤 키보드가 설정 되더라도 여전히 "ASCII 가능"을 표시합니다. 무슨 일 이니? 나는 IB에서 모든 것을 검사했는데 괜찮아 보이는 것 같습니다 ...

+0

좋아요, 나는 3.0 시뮬레이터에서 더 테스트를 해봤고 거기에서 작동하는 것처럼 보입니다 ... –

답변

0

다른보기에서 먼저 becomeFirstResponder를 호출 해 보았습니다. 그래서 텍스트 필드에서 호출 할 때 처음이 아니 었습니까?

한편, 처음 두 개의 resignFirstResponders는 중복됩니다. 버그가 밝혀지는 원인이 될 수도 있습니다.

+0

흠, 그것이 중복되었는지 확실하지 않았습니다.어쨌든 그들을 제거하면 응용 프로그램의 동작이 변경되지 않습니다. –

4

이 문제는 시뮬레이터가 아닌 기기에서만 발생합니다. v2.2.1, 3.0 및 3.1에서이 동작을 복제 할 수 있습니다.

전체 텍스트 필드가 있고 위 예제에서와 같이 textFieldShouldReturn에서 becomeFirstResponder를 호출하여 함께 연결하고 모든 필드가 두 번째 필드마다 키보드 유형 UIKeyboardTypeNumbersAndPunctuation로 설정되면 키보드가 다음으로 변경됩니다. UIKeyboardTypeASCIICapable.

나는 setKeyboardType : UIKeyboardTypeNumbersAndPunctuation을 명시 적으로 시도했지만 아무런 차이가 없습니다.

프로그래밍 방식으로 becomeFirstResponder를 호출하는 경우에만 발생한다는 점에주의해야합니다. 사용자가 텍스트 필드를 직접 클릭하면 키보드가 올바르게 나타납니다.

더 흥미롭게도 디버거에서 keyboardType 속성을 보면 인터페이스에 ASCII 키보드가 표시되어 있어도 UIKeyboardTypeNumbersAndPunctuation로 설정됩니다.

ASCII 및 숫자 키패드가 동일한보기의 다른 모드이기 때문에이 문제가 발생합니다.

키패드의 "다음"/ "돌아 가기"키의 기본 동작은 숫자보기에서 알파벳보기로의 스와핑을 포함하며 여기서 일어나는 일입니다.

수정 : textFieldShouldReturn에서 NO를 반환하면 기본 동작이 발생하지 않습니다.

관련 문제