我有一个在{.xib文件中定义的UISwitch
。我所连接的事件是“Value Changed”。
我想要以下行为(基本上警告用户该功能在软件的Full Vesion中可用):
到目前为止,我无法上班2。现在我有一个kludge。我强制开关回到OFF位置:
[self.switchButton setOn:NO animated:NO];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease];
alert.tag = ALERT_TAG;
[alert show];
问题是你看到开关滑动到ON位置,然后它跳到OFF位置,然后你看到警告框。
有没有办法拦截行为,以便开关不会滑动到ON位置?
更新
我尝试链接到“TouchUpInside”事件并将警报代码移到那里。现在还不足以拦截开关状态的视觉变化。
答案 0 :(得分:8)
我遇到了和你一样的问题。在valueChanged操作方法中,您必须使用动画设置为true来调用setOn方法。所以很快就会:
SelectedItem
ScrollTo()
Focus()
这似乎违反直觉,因为在切换值更改后调用此方法。但不知何故,它似乎有效。
答案 1 :(得分:3)
一个简单的解决方案就是在UISwitch
控件前放置一个尺寸和透明背景颜色相同的按钮。虽然它不是您问题的直接答案,但这是一个很好的解决方法,我总是使用UIImageView
来做到这一点。
答案 2 :(得分:3)
向该UISwitch视图添加一个清晰的颜色子视图,覆盖它并将UITapGestureReconizer添加到该子视图,并且可以在点击操作中触发所有操作操作,包括更改UISwitch视图状态。希望对你有帮助!
答案 3 :(得分:1)
在xib和UISwitch
内部valueChange
操作方法中将-(IBAction) switchValueChanged{
if (toggleSwitch.on) {
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Feature unlocked in Full Version" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease];
alert.tag = ALERT_TAG;
[alert show];
}
}
的状态设置为关闭
{{1}}
答案 4 :(得分:1)
尝试收听TouchDown事件,而不是TouchUpInside。
答案 5 :(得分:1)
为什么不简单地将userInteraction设置为NO
[self.switchButton setUserInteractionEnabled:NO];
答案 6 :(得分:1)
这是您的操作方式,请将UISwitch设置为.touchUpInside
switchBtn.addTarget(self, action: #selector(unlockEvent), for: .touchUpInside)
如果将其设置为.valueChanged,则无论是否进行用户交互,每次都会触发该事件。
答案 7 :(得分:0)
很遗憾,UISwitch似乎没有委托方法来检查是否允许UISwitch进行更改。
我在UISwitch上添加了一个按钮,并处理了该按钮的IBAction事件的切换,这似乎是最好的方法。