2009-11-06 6 views
1

그래서 사용자 지정 TableViewCell을 만들었습니다. 펜촉은 UISwitch입니다. 전에도 시뮬레이터에서 실행하고 클릭하면 애니메이션과 같은 것으로 전환 될 것입니다.UISwitch를 클릭하면 자동 전환 기능이 해제됩니까?

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

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]; 
    } 

: 내 기능이 있습니다. 나는 그것이 자동으로 튀어 나오기 때문에 그것이 무엇이라도 끌기 전에 심지어 그렇게한다라고 확신한다. 그것을 끄는 방법이 있습니까?

감사합니다.

답변

3

UISwitch에서 userInteractionEnabled 속성을 False로 설정해야합니다.

당신은 allready 당신이 당신의 소유 클래스에 delared IBOutlet에 인터페이스 빌더에서 연결을 만들었다 경우이 같은 코드에서 설정 할 수있을 것입니다 : 당신은 직접 속성을 설정할 수 있습니다

mySwitch.userInteractionEnabled = NO; 

인터페이스 빌더에서 아래와 같이 체크 박스를 선택하여 (단 앱에, 당신은 당신의 조건부 논리를 구현하는 어쨌든 IBOutlet까지 단추를 연결해야 할 것입니다.) alt text http://www.clixtr.com/photo/ef06c1f7-8cca-40cd-a454-5ca534ceb9fe

+0

나는 그것을 시도했다. 문제는 TableViewCell에있는 것입니다. userInteractionEnabled를 해제하고 스위치를 클릭하려고하면 뒤에있는 셀에 닿습니다. 셀이 다른보기로 이동합니다. 여전히 객체로 간주해야하므로 셀이 만지 지 않지만 자동 전환은되지 않습니다. – Ethan

+1

userInteraction Enabled가 설정된 (동일한 크기의) 버튼 아래에 일반 UIView를 고정하여 일상 생활을 쉽게 할 수 있습니다. 그런 다음 버튼에서 스위치를 끄면 터치가 스위치를 통과하지만 일반보기로 먹어서 TableView 셀에 도달하지 않습니다. –

+1

또 다른 옵션은 스위치에서 간단히 활성화로 설정하는 것입니다. 그러면 스위치가 회색으로 표시되어 실제 탭을하기 전에 아무 것도하지 않을 것이라고 말할 수 있으며 탭 뒤의 셀로 탭을 전달하지 않습니다. –

1

나는 당신이 뭔가를해야합니다 생각 다음과 같이하십시오 :

// 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 
    } 
} 

문제는 스위치가 이미 켜져있는 상태에 있음을 확인하는 것입니다. 그게 아니라면 (확실하지는 않습니다, 테스트를 거치지 않았습니다) 스위치가 현재 이 아닌지이 켜져 있는지 확인해야합니다. 이 코드는 사용자가 스위치를 전환 할 수 없을 때 상태를 되돌립니다.

더 좋은 방법은 컨트롤을 사용하지 않는 것입니다. 그러나이 경우에는 원하는 것이 아닐 수도 있습니다.

관련 문제