当用户点击UISegmentedControl
并更改选择了哪个细分时,我想执行一些验证。如果验证失败,我想“撤消”他们的选择,并重新选择他们之前选择的项目。
最简单的方法是什么?我想我需要像
这样的东西- (BOOL) segment:(UISegmentedControl *)seg shouldSelectSegmentAtIndex:(NSInteger)newIndex`
但是我看着Apple Docs,但我没有看到类似的东西 - 我根本没有看到will
的任何内容。我是否必须创建一个类别或子类才能执行此操作,或者我只是错过了它?
我想我可以在验证后添加一个包含所选段索引的ivar,然后在验证失败时调用[mySegmentedControl setSelectedSegmentIndex:myIvar];
,或者在myIvar = [mySegmentedControl selectedSegmentIndex];
通过时调用它,但感觉有点麻烦。如果我在同一个屏幕上有很多分段控件,那也有点痛苦。我相信如果我创建自己的子类,我将不得不做这样的事情。
编辑: 我使用的其他编程语言本身支持“撤消”功能,而程序员不必自己实现撤消。我想看看是否有人知道Objective-C的类似内容。如果它不存在,除了我上面描述的ivar方法之外,有没有人知道更好的方法来实现它?
答案 0 :(得分:1)
我不相信没有子类化确实有一种优雅的方式。但由于UISegmentedControl
上没有子类注释,因此可以选择。覆盖setSelectedSegmentIndex
,在其中检查委托是否应该选择该索引。如果应该,请调用super
的实现。如果没有,就什么都不做。
这确实假设没有内部方法搞砸了(以及你无法覆盖的方法)。
答案 1 :(得分:0)
我不确定你在问什么,但如果我理解正确,我相信这会有所作为:
[mySegmentedControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventChanged];
- (void)segmentChanged:(id)sender
{
if (myIvar != validated){
[mySegmentedControl setSelectedSegmentIndex:defaultSegment];
}
}