Dat*_*kar 2 uisegmentedcontrol ios swift
嗨我想在触摸已经选定的片段时获得活动.
我已实施以下解决方案
import UIKit
class MARSSegmentController: UISegmentedControl {
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let oldValue:NSInteger = self.selectedSegmentIndex
super.touchesBegan(touches, withEvent: event)
if oldValue == self.selectedSegmentIndex{
sendActionsForControlEvents(UIControlEvents.ValueChanged)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果我点击非选定的段,ValueChanged事件将被执行两次.
实现点按手势无效.表示当我点击未选择的片段时,它会在使用点按手势时显示旧的所选片段.
如有任何解决方案请建议.
我意识到这是一个较旧的问题,但我遇到了同样的问题,我需要检测是否选择了现有的段以及所选的段更改.
上面的解决方案很接近,但这对我有用.在touchesBegan上捕获现有的选定段索引,然后在touchesEnded中,将旧值与当前选定的段索引进行比较.如果它们相同,我手动触发.ValueChanged事件.注意:这是Swift 2.0语法.
class SegmentedControlExistingSegmentTapped : UISegmentedControl
{
// captures existing selected segment on touchesBegan
var oldValue : Int!
override func touchesBegan( touches: Set<UITouch>, withEvent event: UIEvent? )
{
self.oldValue = self.selectedSegmentIndex
super.touchesBegan( touches , withEvent: event )
}
// This was the key to make it work as expected
override func touchesEnded( touches: Set<UITouch>, withEvent event: UIEvent? )
{
super.touchesEnded( touches , withEvent: event )
if self.oldValue == self.selectedSegmentIndex
{
sendActionsForControlEvents( .ValueChanged )
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为你的问题基于这样一个事实,if oldValue == self.selectedSegmentIndex因为 . 总是会返回 true let oldValue:NSInteger = self.selectedSegmentIndex。因此,您所需要做的就是更改 if 条件,其中if oldValue == selectedValueselectedValue 是您认为选择的分段的值
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |