2013-02-27 2 views
0

iOS 앱에는 약 12 ​​개의 필드가있는 양식이 있으며 사용자가 필드 사이를 이동할 수 있도록 키보드 위에 "이전"/ "다음"버튼을 추가하고 싶습니다.UISegmentedControl 버튼 작동이 중단됩니다.

for (UITextField *t in _textfields) { 
    t.delegate = self; 

    UIToolbar *toolbar = [[UIToolbar alloc] init]; 
    [toolbar setBarStyle:UIBarStyleBlackTranslucent]; 

    UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:@[@"Previous", @"Next"]]; 
    [segControl addTarget:self action:@selector(switchTextField:) forControlEvents:UIControlEventValueChanged]; 
    segControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    segControl.tag = [_textfields indexOfObject:t]; 
    if (segControl.tag == 0) [segControl setEnabled:NO forSegmentAtIndex:0]; 
    else if (segControl.tag == [_textfields count] - 1) [segControl setEnabled:NO forSegmentAtIndex:1]; 

    [segControl sizeToFit]; 

    UIBarButtonItem *segItem = [[UIBarButtonItem alloc] initWithCustomView:segControl]; 

    UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
    UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.view action:@selector(endEditing:)]; 
    [toolbar setItems:@[segItem, flexButton, doneButton]]; 
    [toolbar sizeToFit]; 
    [t setInputAccessoryView:toolbar]; 
} 

난 데 문제는 세그먼트의 모든 너무 자주 하나가 작동을 멈 춥니이다 :이 같은 있습니다. 메서드 switchTextField이 호출되지 않고 버튼이 정상적으로 보이지만 비활성화되어 있지는 않지만 터치는 등록되지 않습니다. 때로는 "이전"버튼 일 때가 있으며, 때로는 "다음"버튼 일 수도 있고 동시에 둘 다 동시에 실행하지 않을 수도 있습니다. 때로는 둘 다 잘 작동합니다. 단추 중 하나가 멈 추면 도구 모음을 사용하지 않고 다른 텍스트 필드를 누르거나 키보드를 닫고 다시 편집하기 만하면됩니다 (일시적으로 수정하는 방법). 무엇이 문제 일 수 있습니까?

답변

1

이전/다음 컨트롤에 대해 UIButton의 동작을 실제로 사용하려는 경우 세그먼트 컨트롤은 좋은 선택이 아닙니다.

내가 생각하는 것은 세그먼트 화 된 컨트롤과 선택된 세그먼트가없는 도구 모음을 초기화한다는 것입니다. 따라서 prev/next를 처음 탭하면 값이 변경되고 해당 세그먼트 컨트롤에 해당 세그먼트가 선택됩니다. 이전/다음을 계속 탭하면 결국 세그먼트가 선택되어있는 세그먼트 컨트롤로 이동하고 세그먼트는 이미 선택된 세그먼트이므로 탭 한 경우 값 변경 이벤트를 발생시키지 않습니다.

당신은 명시 적으로 (재귀 switchTextField:를 트리거하지 않습니다는지 등) switchTextField: 방법으로 선택된 세그먼트를 선택 해제하거나 대신 분할 컨트롤의 다음 이전/대한 UIButton 객체를 사용하도록 구현을 변경할 수 있습니다.

나는 UIButton으로가는 것이 좋습니다.

+0

팁으로 선택한 세그먼트를 재설정 해 주셔서 감사합니다. 버튼 대신 세분화 된 컨트롤을 사용하는 이유는 간단합니다. 이러한 "이전/다음"버튼이 서로 다른 버튼 대신 하나의 컨트롤에서 세그먼트처럼 결합되는 것이 더 낫습니다. – SaltyNuts

+0

조금 더 작업했지만 연결된 배경처럼 자신의 배경 이미지로 UIButton을 사용자 정의 할 수 있습니다. 나는 일반적으로 의도하지 않은 방식으로 컨트롤을 사용하는 구현을 피하려고 노력하지만 (예 : 선택 컨트롤을 버튼으로 사용), 그렇다면 멋지게 보이고 작동합니다. – XJones

관련 문제