【发布时间】:2012-07-03 02:35:07
【问题描述】:
我的目标是在我点击已选择的段时再次触发 UIControlEventValueChanged 委托。
所以我参考了以下链接
uisegmentedcontrol-register-taps-on-selected-segment
maintaining-selection-in-uisegmentedcontrol
根据链接,我创建了一个 uisegmentedcontrol 子类,实现了- (void) setSelectedSegmentIndex:(NSInteger)toValue { 方法并编写了代码(来自上述链接)。
它在 Ipad1 上运行良好。但是,当点击已选择的段时,继承/子类中的 setSelectedSegmentIndex 不会在 Ipad2 中触发!!!!但是当我点击未选择的段索引时它工作正常。
我做的代码如下
主类
ReselectableSegmentControl *firstNextSegmentedControl = [[ReselectableSegmentControl alloc] init];
firstNextSegmentedControl.frame = CGRectMake(xCordinate, 255, 188, 50);
firstNextSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
firstNextSegmentedControl.tag = index + 1;
[firstNextSegmentedControl addTarget:self action:@selector(firstNextThenSegmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"NoTimerCounter.png"] atIndex:0 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Timer.png"] atIndex:1 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Counter.png"] atIndex:2 animated:YES];
firstNextSegmentedControl.selectedSegmentIndex = 0;
[self.view addSubview:firstNextSegmentedControl];
[firstNextSegmentedControl release];
firstNextSegmentedControl = nil;
UISegmentSubClass .h 文件
#import <Foundation/Foundation.h>
@interface ReselectableSegmentControl : UISegmentedControl {
}
@end
UISegmentSubClass .m 文件
-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{
if (selectedValue==self.selectedSegmentIndex) {
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
[super setSelectedSegmentIndex:selectedValue];
}
或
-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{
if (self.selectedSegmentIndex == selectedValue) {
//doing my operation if tapped again the selected value.
else {
super.selectedSegmentIndex = selectedValue;
}
}
或
- (void) setSelectedSegmentIndex:(NSInteger)toValue {
if (self.selectedSegmentIndex == toValue) {
[super setSelectedSegmentIndex:UISegmentedControlNoSegment];
} else {
[super setSelectedSegmentIndex:toValue];
}
}
以上所有方法都不适用于 Ipad2。
感谢您对此问题的任何帮助。
谢谢。
【问题讨论】:
-
您正在尝试触发值更改方法而不更改值。只需创建一个在您想要的事件中发生的新方法并使用它。
标签: iphone objective-c uisegmentedcontrol ipad-2 uicontrolevents