2011-10-06 4 views
0

사용자가 "취소"UIBarButtonItem 키를 눌렀을 때 키보드를 닫으려고합니다. 그러나 취소 버튼을 클릭하면 "인식 할 수없는 셀렉터가 인스턴스로 전송되었습니다"오류가 발생하는 SIGABRT가 표시됩니다. 취소 버튼을 만들 수키보드를 닫으려고 할 때 "인식 할 수없는 선택기"오류가 발생했습니다.

내 코드는 다음과 같습니다

- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    //Add cancel button to navigation bar 
    UIBarButtonItem *dismissKeyboardBttn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissKeyboard:)]; 
    self.navigationItem.rightBarButtonItem = dismissKeyboardBttn; 
} 

그리고이 방법이 키보드 기각 :

- (void)dismissKeyboard:(id)sender 
{ 
    [activeField resignFirstResponder]; 
    //^^This line causes the SIGABRT^^ 
} 

그것은 매우 간단 것입니다. 어떤 아이디어?

업데이트 : activeField는 사용자가 현재 편집중인 UITextField로 scrollView를 이동하는 데 사용하는 UITextField입니다. 이러한 두 가지 방법으로 설정됩니다

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    activeField = textField; 
} 
- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    activeField = nil; 
} 

업데이트 2 : 나는 "textFieldShouldReturn"방법을 사용하여 키보드를 해고하려고 할 때 재미있는, 나는 키보드 알림을받을 내의 ViewController를 등록하고, 나는이 같은 오류가 . 내 textFieldShouldReturn 코드는 다음과 같습니다.

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 

    if ([textField canResignFirstResponder]) 
    { 
     [textField resignFirstResponder]; 
    } 

    return YES; 
} 
+1

당신이 활동 범위를 할당하는 코드를 게시 할 수 –

+0

나중에, 지금까지 거기에 – MattL

답변

1

: 또한, 나는 항상 때 resignFirstResponder이 추가 헤더 파일에서

, 텍스트 필드에 대한 IBAction를을 생성하는 첫 번째 응답자가 된 키보드가 나타납니다 : (내 경우는 "완료"버튼으로) 바 버튼을 생성하는 방법을 생성, 구현 파일에서

- (IBAction)textFieldDidBeginEditing:(UITextField *)textField; 

를하고 오른쪽에 추가 항해하다 ation bar. 동시에, 나는 당신이 내가 그것을 클릭 (그리고 키보드가 종료하면 버튼이 사라하려는 경우,

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    // create new bar button with "Done" as text 
    // set the target of the action as the text field (since we want the text field to resign first responder status and dismiss the keyboard) 
    // tell the text field to resign with the stock 'resignFirstResponder' selector 
    UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                     target:textField 
                     action:@selector(resignFirstResponder)]; 

    // add the button with target/action pairing to the navigation bar 
    [[self navigationItem] setRightBarButtonItem:bbi]; 
} 

또한 첫 번째 응답자에게이 된 텍스트 필드 사이의 대상 액션 페어링()를 작성, 나는 사용 편집이 이제 첫 번째 응답자 인식 완료 이후을 textFieldDidEndEditing :

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [[self navigationItem] setRightBarButtonItem:nil]; 
} 
1

activeField 란 무엇입니까? UIResponder 인 경우 resignFirstResponder에 응답해야합니다. 어쩌면 그렇지 않을 수도 있습니다. UIViews와 UIViewController는 UIResponders입니다.

+0

활동 범위 내가 이동 사용하고 단지의 UITextField 내. 유저가 현재 편집되고있는 UITextField 에의 scrollView iting. 위에 코드를 게시했습니다. – MattL

+0

오류가 발생했을 때 activeField가 nil인지 확인 했습니까? nil은 대부분의 경우 셀렉터를 자동으로 무시하도록 프로그래밍되었지만 모두에 대해서는 잘 모르겠습니다. – morningstar

+0

예, 확인하지 않았습니다. 내가 편집하고있는 텍스트 필드로 설정됩니다. 나는 매일 이것을보고 있으며 무엇이 잘못되었는지를 알 수 없다. textFieldShouldReturn에 관한 비트는 그것을 좁혀줍니다. – MattL

0

Morningstar가 맞습니다. activeField 란 무엇입니까? ID는 무엇이며 캐스트를 추가해야합니까? (UIButton*)? 나는 상황에서 오전 현재 뷰 컨트롤러에서 다음과 같이

if(myObject canResignFirstResponder){ 

} 
+0

activeField는 사용자가 현재 편집중인 UITextField로 scrollView를 이동하는 데 사용하는 UITextField입니다.위에 코드를 게시했습니다. – MattL

+0

resignFirstResponder를 호출 할 때 "if"문을 사용하지만 여전히 동일한 오류가 발생합니다. – MattL

+0

MattL이 내 이메일을 사용하여 저에게 연락하므로 더 많은 지원을 드릴 수 있습니다. – Peres

관련 문제