Tru*_*an1 -1 uisegmentedcontrol iboutlet ios ios8
我正在尝试在分段控件上处理点击事件,但是再次单击所选按钮时.例如,对于下面已选择"秒"的屏幕截图,如何再次单击"第二个"按钮时如何处理操作?
我试过了IBOutlet,但它只在值发生变化时触发.然后我尝试了下面的代码,但是只有在值发生变化时它才触发.在两种情况下,选择"秒"时,再次单击"秒"不会触发任何内容.有没有办法做到这一点?
segmentedControl.addTarget(self, action: "segementedAnyTap:", forControlEvents: .AllEvents)
Run Code Online (Sandbox Code Playgroud)

小智 6
这适用于我,为UISegmentedControl添加手势识别器
- (void)viewDidLoad
{
[super viewDidLoad];
[self.segmentedControl addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touched:)];
[self.segmentedControl addGestureRecognizer:tapGesture];
}
- (void)valueChanged:(id)sender
{
// value change code
}
- (void)touched:(id)sender
{
// code to check if the segmented controls index has not changed.
// execute desired functionality
}
Run Code Online (Sandbox Code Playgroud)
很好的答案@Sgorbyo,这是它的 Swift 3 版本:
override func viewDidLoad() {
super.viewDidLoad()
let segmentedTapGesture = UITapGestureRecognizer(target: self, action: #selector(onTapGestureSegment(_:)))
segmentedControl.addGestureRecognizer(segmentedTapGesture)
}
@IBAction func onTapGestureSegment(_ tapGesture: UITapGestureRecognizer) {
let point = tapGesture.location(in: segmentedControl)
let segmentSize = tipSegmentedControl.bounds.size.width / CGFloat(segmentedControl.numberOfSegments)
let touchedSegment = Int(point.x / segmentSize)
if segmentedControl.selectedSegmentIndex != touchedSegment {
// Normal behaviour the segment changes
segmentedControl.selectedSegmentIndex = touchedSegment
} else {
// Tap on the already selected segment
segmentedControl.selectedSegmentIndex = touchedSegment
}
onSegment(segmentedControl)
}
@IBAction func onSegment(_ sender: Any) {
// Your segment changed selector
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3383 次 |
| 最近记录: |