2011-01-29 2 views
0

보기에 네 개의 textField가 있습니다. 처음 세 개는 표준 키보드로 편집됩니다. 마지막은 textField의 inputView 속성으로 선택기로 편집됩니다. 이것은 슬라이드를 위아래로 다루기 때문에 멋지다.하나의 키보드를 밀어 넣는 방법 사용자 지정 슬라이드 위로 밀어 내기

상상해보십시오. 표준 키보드를 사용하여 처음 세 개의 textField 중 하나에 뭔가를 입력하고 있습니다. 이제 네 번째 행을 탭합니다. 표준 키보드를 뒤로 이동시키고 피커가 위로 밀기를 원합니다. 지금 당장은 즉시 교체됩니다.

textField 대리자 메서드를 사용하여 표준 키보드의 resignFirstResponder 및 picker의 becomeFirst 응답기에 논리를 쓰려고 시도했지만 여전히 변경됩니다. 여기에 코드가 있습니다.

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
//If we go from a keyboard field to a picker field 
if ((self.textFieldBeingEdited == self.nameField || self.locationField || self.controllerSNField)){ 
    if (textField == equipTypeField) { 

     //Put away the keyboard 
     [self.textFieldBeingEdited resignFirstResponder]; 

     //Show the Picker 
     [textField becomeFirstResponder]; 
    } 
} 
} 

은 또한 아래 선택기를 밀어 나는 다른 사람의에 네 번째보기에서 갈 경우 키보드를 슬라이드 로직을 작성해야합니다. 그러나 내가 전반을 얻을 수 있다면 두 번째 것은 분명해야한다.

애니메이션 블록에 들어 가지 않고이 작업을 수행하는 방법에 대해 알고 싶습니다. 어쩌면 알림을 가지고 있을까요?

감사합니다.

답변

1

메서드가 호출 될 때까지 이미 편집을 시작한 것이므로 resignFirstResponder에 대한 호출이 더 이상 응답하지 않으므로 문제가 발생했을 수 있습니다. 아마 당신이 다시 첫 번째 반응자가된다면 효과가있을 것입니다. 그러나 equipTypeFieldbecomeFirstResponder을 호출하면 textFieldDidBeginEditing이 다시 호출되어 무한 루프에 빠지게 될 수 있습니다. 의심의 여지가. 그러나 적어도, 나는이 시도 것 :

//So that the keyboard that animates out is the one that was previously showing 
[self.textFieldBeingEdited becomeFirstResponder]; 
//Animate the keyboard out 
[self.textFieldBeingEdited resignFirstResponder]; 
//Don't let the user screw anything up 
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
//Animate the new keyboard in a little while later 
[textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.25]; 
//Let the user interact with the application again after the animation completes 
[[UIApplication sharedApplication] performSelector:@selector(endIgnoringInteractionEvents) withObject:nil afterDelay:0.25]; 

이 여전히 textFieldDidBeginEditing에 넣어, 당신은 무한 루프를 얻을 수 있으므로,이 코드를 삽입하는 위치의 질문을 열어 둡니다. 나의 제안은 그것을 시도하고 어떤 일이 일어나는가를 보는 것이다. 그것이 효과가 있다면, 그렇지 않으면, 일종의 불리언 플래그 또는 무언가를 넣으면 didFinishEditing이 호출되기 전에 한 번만 호출해야합니다.

+0

작동하지 않았지만 해결책에서 한 두 가지를 배웠습니다. 나는 당신이 무한 루프에 대해 말하는 것을 봅니다. 감사. – Aaronium112

관련 문제