1

나는 잠시 동안 내 머리를 벽에 부딪쳐 왔지만 아직도이 문제를 해결하지 못했다.UITextField가 키보드를 사퇴하지 않는다.

저는 modalViewController를 가지고 UITextField (myTroubleMaker라고 부르 자합니다)와 몇 가지 다른 중요하지 않은 구성 요소를 가지고 있습니다. modalVC를로드 할 때 UITextField를 초기화하고 즉시 firstResponder가 될 수있게하고, 또한 modalVC (자체)에 위임자를 설정합니다. modalView는 UITextField와 키보드 열기에 초점을 맞춰 멋지게로드됩니다. 그러나 화면의 아무 곳이나 터치하거나 클릭하면 키보드가 닫히지 않습니다. UITextField에서 포커스를 전환하고 firstResponder를 종료하지만 키보드가 닫히지 않습니다.

이 번거로운 문제의 원인은 무엇입니까? 이 문제를 어떻게 올바르게 해결할 수 있습니까?

코드 : 그것은 모두 내가 키보드로이 mindnumbing 문제를 제외하고 원하는 방식으로 작업이다 .H

@interface myModalViewController : UIViewController <UItextFieldDelegate> 
{ 
    UITextField *myTroubleMaker; 
} 

@property (nonatomic, retain) UITextField *myTroubleMaker; 

@end 

하는 .m

//I synthesized it properly 
-(void)loadView 
{ 
    [super loadView]; 

    self.myTroubleMaker = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)]; 
    self.myTroubleMaker.backgroundColor = [UIColor clearColor]; 
    self.myTroubleMaker.textColor = [UIColor whiteColor]; 
    self.myTroubleMaker.text = @""; 
    self.myTroubleMaker.font = [UIFont systemFontOfSize:self.myTroubleMaker.frame.size.height - 8]; 
    self.myTroubleMaker.adjustsFontSizeToFitWidth = YES; 
    self.myTroubleMaker.minimumFontSize = 0.0; 
    self.myTroubleMaker.textAlignment = UITextAlignmentCenter; 
    self.myTroubleMaker.autocorrectionType = UITextAutocorrectionTypeNo; 
    self.myTroubleMaker.delegate = self; 
    self.myTroubleMaker.placeholder = @"I eat ur brainz, yoh!"; 
    self.myTroubleMaker.keyboardType = UIKeyboardTypeDefault; 
    self.myTroubleMaker.returnKeyType = UIReturnKeyDone; 
    [self.view addSubview:self.tabNameInputField]; 
    [self.myTroubleMaker becomeFirstResponder]; 
} 

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    self.tabNameInputField.text = @""; 
    return YES; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [textField resignFirstResponder]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
{ 
    UITouch *touch = [[event allTouches] anyObject]; 

    if ([touch view] == someOtherModalVCComponent) { 
     //do stuff 

     if([self.tabNameInputField isFirstResponder]) 
     { 
      [self.tabNameInputField resignFirstResponder]; 
     } 

     [self loadGraphics]; 
    } 

    if ([touch view] != self.myTroubleMaker) 
    { 
     if([self.myTroubleMaker isFirstResponder]) 
     { 
      [self.myTroubleMaker resignFirstResponder]; 
     } 
    } 
} 

. 이 질문을 썼음에도 불구하고 가능한 해결책에 대해 비슷한 문제를 확인했습니다.

도움을 주시면 감사하겠습니다. 나는 두통을 여기에서 얻고있다 ...


해결책에 의해 해결 나는 아래에서 받아 들였다.

나중에 참조 할 수 있도록 내 특정 솔루션을 얻으려면 devforums.apple.com/message/425914을 사용했습니다. NavigationController를 사용하여 modalVC를 전달할 때부터 UINavigationController에서 범주를 만들어 사용자의 메서드를 추가하여 키보드의 자동 해제를 지원해야했습니다.

답변

4

아마 UIModalPresentationFormSheet을 사용 중입니다. 그렇다면 iPad에서 키보드를 닫지 않는 기능입니다.

iOS4에서는 기본 동작을 제거하기 위해 재정의하는 경우 도움이 될 수있는 새로운 방법 disablesAutomaticKeyboardDismissal:이 있습니다.

http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/disablesAutomaticKeyboardDismissal

+0

이 나에게 정확히 무슨 일이 있었는지입니다. 대단한 직업! 나중에 참조 할 수 있도록 특정 솔루션을 얻으려는 https://devforums.apple.com/message/425914를 사용했습니다. NavigationController를 사용하여 modalVC를 전달할 때부터 UINavigationController에서 범주를 만들어 사용자의 메서드를 추가하여 키보드의 자동 해제를 지원해야했습니다. 다시 한번 감사드립니다. –

0

사용자 지정 UIButton을 구현하고 루트보기의 뒷면으로 보내면됩니다. 버튼을 클릭하면 첫 번째 응답자가 사임합니다.

다른 답변과 같은 다른 해결책이 있습니다.

관련 문제