2013-06-30 4 views
1

많은보기가있는 상대적으로 큰 iPhone 응용 프로그램이 있습니다. 키보드에서 다음/이전 옵션을 구현하고 싶습니다. 필자는 온라인에서 보았던 몇 가지 코드 예제로 UI를 구현했지만 그 모두는 텍스트 필드 간의 실제 전환을 구현하기 위해 각보기 컨트롤러에 코드를 추가해야한다고 가정합니다.iOS : 텍스트 입력란 사이를 자동으로 전환하는 방법

내 질문은 : 거기에 일반적인 방법은, 일부 텍스트 필드에 주어진, 다음 필드가 순서대로 무엇입니까? (각보기 컨트롤러를 리팩터링하지 않고)

iPhone 시뮬레이터를 사용하고 컴퓨터의 Tab 키를 누를 때마다 필드 간 전환이 발생하므로 기본 제공 또는 iOS에서 구현하기위한 일반적인 방법.

설명 : 보기 컨트롤러의 각 유형에 특정 코드를 추가하지 않고이를 수행하는 방법은 무엇입니까? (일반 코드 추가 가능)

+0

아니요 필드간에 이동하는 코드 로직을 추가하지 않으면 수행 할 방법이 없습니다. – Geek

+0

당신은 대답이 아니라 주석으로 써야합니다. 댓글은 설명을위한 것입니다. – SevenBits

+0

분명히하겠다 :보기 컨트롤러의 각 유형별로 특정 코드를 추가하지 않고 코드를 작성하는 방법이 있습니까? (일반 코드를 추가하는 것이 좋습니다) – Eliktz

답변

2

내가 내가 여기 나에게 주어진 많은 좋은 답변의 도움으로이 문제를 해결하는 방법을 쓰고 싶어 :)

첫째, 내가보기에 관계없이 탭을 생성 완전히 일반적인 코드를 만들 수 없습니다 그것은이다 .

  • 내가 나의 다음/완료/이전 버튼과 적절한 조치 위임과 사용자 지정 도구 모음을 만든 : 대신 나는 내가 firstResponder 방법이 작동하지 함께 가장 일반적인 솔루션입니다 생각이 일을 만들었습니다.
  • "카테고리"를 추가하여 UIViewController를 확장했습니다. 이 범주는 fieldsArray를 선언하고 대리자 메서드를 구현합니다.
  • 지금 모든 특정 뷰 컨트롤러 (범주를 가져 옆) 할 필요가 어떤 버튼이에 도구 모음에 추가 init 메소드 속성에 및 호출에 따라이 fieldsArray 제공하는 것입니다

난 당신이 할 수 희망 필드 이것으로부터 이익을 얻고 모든 좋은 답변을 주셔서 감사합니다.

0

당신은 텍스트 필드와 뷰 콘트롤러를 인수로 취하는 유틸리티 클래스에서 메소드를 가질 수 있습니다. 태그 필드를 적절하게 할당했다고 가정하면, 텍스트 필드의 "태그"속성을 사용하여 해당 뷰 컨트롤러에서 다음 텍스트 필드를 찾을 수 있습니다. 숫자가 좋을 것 같아요. VC의 간단한 콜백 메소드가 포커스 변경을 처리 할 수 ​​있습니다. 그게 내가 지금 볼 수있는만큼 일반적인 것.

+0

답해 주셔서 감사합니다. 그러나 태그 속성을 사용하는 것은 내가 피하려고했던 것 중 하나입니다. 대부분의 테이블이 파리 위에 만들어지기 때문에 태그를 모두 지정하는 것은 약간 지저분한 과정입니다. – Eliktz

+0

@Eliktz - 태그는 단지 제안에 불과합니다. 다음 필드를 원하는대로 결정할 수 있습니다. 메커니즘은 그대로 유지됩니다. (예를 들어 x-y 좌표를 사용하여 다음 필드를 찾을 수 있습니까?) – katzenhut

0

이 내가 생각 해낸 몇 가지 일반적인 코드는 다음과 같습니다

// add a property for the fieldsArray 

//add this in viewDidLoad 
_fieldsArray = [[NSMutableArray alloc] init]; 
NSArray *viewsArray = [self.view subviews]; 
for (id view in viewsArray) { 
    if ([view isKindOfClass:NSClassFromString(@"UITextField")]) { 
     [_fieldsArray addObject:view]; 
    } 
} 

//add this in your action that switches the fields 
for (UITextField *field in _fieldsArray) { 
    if ([field isFirstResponder]) { 
     if ([fieldsArray lastObject] == field) { 
      [_fieldsArray[0] becomeFirstResponder]; 
     }else { 
      NSUInteger nextIndex = [_fieldsArray indexOfObject:field] + 1; 
      [_fieldsArray[nextIndex] becomeFirstResponder]; 
     } 
     break; 
    } 
} 

를 사용하기 전에이 개선되어야한다. 배열이 비어 있거나 전무하거나 단지 하나의 객체가있는 경우

1) 몇 가지 검사를 할) 재귀

2 self.view의 모든 서브 뷰를 찾을 수 있습니다.

행운을 빈다.

관련 문제