보기에 3 개의 UITextFileds가 있고 그 중 2 개에서만 UITextFieldDelegate 메서드의 논리를 적용하려고합니다. 호출을 트리거 한 UITextField를 어떻게 결정합니까?UITextField의 인스턴스를 비교하는 방법
미리 감사드립니다. 당신이 위임 방법을 사용하는 경우
보기에 3 개의 UITextFileds가 있고 그 중 2 개에서만 UITextFieldDelegate 메서드의 논리를 적용하려고합니다. 호출을 트리거 한 UITextField를 어떻게 결정합니까?UITextField의 인스턴스를 비교하는 방법
미리 감사드립니다. 당신이 위임 방법을 사용하는 경우
일반적으로, 간단한 포인터 비교 작동, 당신은 단지 객체의 신원을 확인하고자하기 때문이다.
-(BOOL)textFieldShouldReturn:(UITextField*)textField {
if (textField != theIgnoredTextField) {
...
또는 .tag
을 텍스트 필드에 할당 할 수 있습니다.
-(BOOL)textFieldShouldReturn:(UITextField*)textField {
if (textField.tag != 37) {
...
장점은 theIgnoredTextField
에 대한 참조를 저장하는 데 필요하지 않습니다, 그리고 태그는 인터페이스 빌더에서 설정 될 수 있지만, 그것은 인식 매직 넘버 "37"에 의존한다.
같은 - (void)textFieldDidEndEditing:(UITextField *)textField
당신이해야 할 모든 당신이 당신의 클래스 인스턴스 변수에 그들에 대한 참조를 유지하는 경우 당신은 포인터를 비교하거나 사용할 수
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField == myFirstTextField)
{
//blah
}
else if (textField == mySecondTextField)
{
//etc etc.
}
else
{
//WHEE!
}
}//method end
같은 일을 할 것입니다 UIView의 태그 속성, 더 좋아하는 것.
대리자 메서드에는 textfield 개체를 가리키는 텍스트 매개 변수가 있습니다. 이 매개 변수를 텍스트 필드 개체와 비교하여 어떤 개체인지 확인할 수 있습니다. 대리자 방법에
UITextField *field1, *field2, *field3;
당신이 매개 변수를 비교할 수 있습니다
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == field1) {
// do something special for field 1
} ...
... 또는 컴파일 된 열거 형 상수'KTMIgnoredTextFieldTag '. 테이블 뷰 셀 구성에서 많이 사용합니다. –
@Graham :보기가 코드로만 구성되어 있으면 좋지만 IB의 AFAIK에서는 "KTMIgnoredTextFieldTag"와 같은 정수가 아닌 정수를 입력 할 수 없습니다. – kennytm
아니요. 그러나 텍스트 필드를 2로 사용해야하는 모든 곳에서 마법 숫자가 많이 줄어 듭니다. –