iphone - UISegmentedControl 寄存器点击选定的段

标签 iphone uisegmentedcontrol

我有一个分段控件,用户可以在其中选择如何对列表进行排序。工作正常。

但是,我希望当点击已选择的段时,顺序会颠倒。我已准备好所有代码,但我不知道如何注册这些段上的水龙头。看来您可以使用的唯一控制事件是 UIControlEventValueChanged,但这不起作用(因为所选段实际上并未更改)。

这个问题有解决办法吗?如果是的话,那是什么?

提前致谢!

最佳答案

您可以子类化UISegmentedControl,然后覆盖setSelectedSegmentIndex:

- (void) setSelectedSegmentIndex:(NSInteger)toValue {
    if (self.selectedSegmentIndex == toValue) {
        [super setSelectedSegmentIndex:UISegmentedControlNoSegment];
    } else {
        [super setSelectedSegmentIndex:toValue];        
    }
}

如果使用 IB,请确保将 UISegmentedControl 的类设置为您的子类。

现在您可以像平常一样监听相同的UIControlEventValueChanged,除非用户取消选择该段,您将看到等于UISegmentedControlNoSegment<的selectedSegmentIndex/:

-(IBAction) valueChanged: (id) sender {
    UISegmentedControl *segmentedControl = (UISegmentedControl*) sender;
    switch ([segmentedControl selectedSegmentIndex]) {
        case 0:
            // do something
            break;
        case 1:
            // do something
            break;
        case UISegmentedControlNoSegment:
            // do something
            break;
        default:
            NSLog(@"No option for: %d", [segmentedControl selectedSegmentIndex]);
    }
}

关于iphone - UISegmentedControl 寄存器点击选定的段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1620972/

相关文章:

iphone - 如何从缓冲区而不是音频文件中获取耳机插孔音频?

ios - Swift 如何在集合单元格中包装标签的长文本并在文本标签中设置边距

ios - 在不关闭键盘的情况下平滑地调整大小和移动 UITableViewCell

iphone - 分段控件的更改值?

iphone - UITableViewCell/UISegmentedControl 边框问题

iphone - self 保留在这个 Objective-C block 中吗?

iPhone桌面效果

ios - 如何检查使用 UISegmentedControl 选择了哪个段

ios - 用于 2 个 TableViews/Segmented Control Swift 的自定义单元格

ios - 当我为所有状态设置背景图像时,为什么我的 UISegmentedControl 段在 iOS 8 中突出显示?