문제

그래서 나는 사용자 정의 TableViewCell을 만들었고 펜촉에서 나는 UISwitch. 시뮬레이터에서 실행하여 클릭하면 애니메이션 등으로 끄는 것과 켜기로 전환됩니다.

특정 조건이 사실 일 때 사용자가 OFF에서 ON으로만 변경할 수있는 기능을 추가하려고합니다. 사용자가 스위치에 닿으면 조건이 참인지 확인하고 스위치가 움직이지 않으면 원합니다.

나는 설정했다 IBAction 사용자가 내부에 닿으면 내 기능이 실행됩니다. 내 기능은 다음과 같습니다.

if([on_switch isOn])
    {
        if([my_switch canSwitchOn])
        {
            NSLog(@"SWITCHED ON SUCCESSFULLY");
            [on_switch setOn:TRUE animated:TRUE];
        }
        else
        {
            NSLog(@"SWITCHED ON UNSUCCESSFULLY");
                        //Put in popup here
        }
    }
    else
    {
        [[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index];
        [on_switch setOn:FALSE animated:TRUE];
    }

그러나, 내가 무엇을하든, 그 스위치는 반대 할 것입니다. 나는 그것이 무엇이든 푹 빠지기 전에도 그렇게하게하는 자동 플립이라고 확신합니다. 그것을 끄는 방법이 있습니까?

감사!

도움이 되었습니까?

해결책

당신이해야 할 일은 설정됩니다 userInteractionEnabled 당신의 거짓에 대한 속성 UISwitch.

당신이 All Readay가 인터페이스 빌더에서 IBOutlet 당신은 당신의 소유 수업에서 삭제했다면, 당신은 다음과 같은 코드로 설정할 수 있습니다.

mySwitch.userInteractionEnabled = NO;

아래와 같이 확인란을 선택하여 인터페이스 빌더에서 속성을 직접 설정할 수도 있습니다 (앱에서는 버튼을 IBOutlet 어쨌든 조건부 논리를 구현합니다.)Alt Text http://www.clixtr.com/photo/ef06c1f7-8cca-40cd-a454-5ca534ceb9fe

다른 팁

다음과 같은 것이 필요하다고 생각합니다.

// Somewhere just after the creation of _switch
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];

// Target/Action method
- (void)switchValueDidChange:(UISwitch *)sender {
    if(sender.on && [self canSwitchOn] == NO){
        [sender setOn:NO animated:YES];
        // Popup
    }
}

문제는 스위치가 이미 State On Touch Up에 있다고 커밋되었다는 것입니다. 그렇지 않은 경우 (확실하지 않습니다. 테스트되지 않았습니다) 스위치가 현재인지 확인해야합니다. ~ 아니다 에. 이 코드는 사용자가 스위치를 전환 할 수 없을 때 상태를 되돌립니다.

더 좋은 방법은 제어를 비활성화하는 것이지만,이 경우 원하는 것이 아닐 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top