-1

UIViewController에 컨테이너보기를 구현 한 다음 UITableViewController을 배치했습니다. 이 테이블에는 UITextField 쌍이 포함 된 정적 행이 들어 있습니다. 이제 사용자가 텍스트 필드 중 하나가 첫 번째 응답자 일 때 키보드의 반환 키를 눌렀을 때를 감지하려고합니다. 포함 된보기 컨트롤러에서 테이블보기 컨트롤러가 아닙니다. 이것이 가능한가, 아니면 객체에 컨트롤러가 있다는 것을 아는 것만 가능합니까?보기 컨트롤러가 포함 된 UITextFieldDelegate

이 작업을 시도했지만 textFieldShouldReturn이 호출되지 않았습니다. 보기 컨트롤러의 .h 파일에서 UITextFieldDelegate을 준수하면 textFieldShouldReturn을 구현하고 텍스트 필드에 delegate을 설정하려면 prepareForSegue의 컨테이너보기에 대한 참조를 얻은 다음 해당 텍스트 필드에 대해 self으로 설정하십시오. (그들이 포함하는 컨트롤러에 액세스 할 수 있도록 내가 그들을 공개했다.) 나는 키보드에 돌아 쳤을 때

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"Show Container View"]) { 
     if ([segue.destinationViewController isKindOfClass:[ContainerTableViewController class]]) { 
      self.ctvc = segue.destinationViewController; 
      self.ctvc.firstTextField.delegate = self; 
      self.ctvc.secondTextField.delegate = self; 
     } 
    } 
} 

이 왜 호출되지 textFieldShouldReturn입니까?

답변

0

왜 키보드에서 돌아 왔을 때 textFieldShouldReturn이 호출되지 않습니까?

텍스트 필드의 대리인이 아니기 때문에 이는 곧 대리인을 설 정하기 때문입니다. 당신은 말하고있다 :

self.ctvc.firstTextField.delegate = self; 
self.ctvc.secondTextField.delegate = self; 

그러나 그것은 prepareForSegue에있다. 그 당시 ctvc은 (는) 아직 뷰를로드하지 않았으며 firstTextFieldsecondTextField은 여전히 ​​모두 nil입니다. 따라서 여기에있는 코드는 효과가 없습니다.

관련 문제