문제
그래서 나는 사용자 정의 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에 있다고 커밋되었다는 것입니다. 그렇지 않은 경우 (확실하지 않습니다. 테스트되지 않았습니다) 스위치가 현재인지 확인해야합니다. ~ 아니다 에. 이 코드는 사용자가 스위치를 전환 할 수 없을 때 상태를 되돌립니다.
더 좋은 방법은 제어를 비활성화하는 것이지만,이 경우 원하는 것이 아닐 수도 있습니다.