我可以为 UISegmentedControl 覆盖 UIControlEventTouchUpInside 吗?
Posted
技术标签:
【中文标题】我可以为 UISegmentedControl 覆盖 UIControlEventTouchUpInside 吗?【英文标题】:Can I override the UIControlEventTouchUpInside for a UISegmentedControl? 【发布时间】:2009-08-06 21:32:08 【问题描述】:我有一个 UISegmentedControl,如果您单击已选择的项目,我想用它来执行特定操作。
我的想法基本上是这样的:
- (void)viewDidLoad
UISegmentedControl * testButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"one", @"two", nil]];
[self.view addSubview:testButton];
[testButton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
[super viewDidLoad];
-(void) clicked: (id) sender
NSLog(@"click");
(在clicked:
中,我只是检查一下新选择的索引是否与点击前的旧选择索引不同)
问题是我似乎无法覆盖 TouchUpInside 控件事件的操作。任何帮助表示赞赏!
-S
【问题讨论】:
【参考方案1】:您可以使用子类来获得您想要的行为。创建具有一个 BOOL ivar 的 UISegmentedControl 的子类:
BOOL _actionSent;
然后,在实现中,重写以下两个方法:
- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event
[super sendAction:action to:target forEvent:event];
_actionSent = TRUE;
- (void) setSelectedSegmentIndex:(NSInteger)toValue
_actionSent = FALSE;
[super setSelectedSegmentIndex:toValue];
if (!_actionSent)
[self sendActionsForControlEvents:UIControlEventValueChanged];
_actionSent = TRUE;
可能还有其他方法,但这对我来说没问题。我有兴趣了解其他方法。
【讨论】:
【参考方案2】:将 UIControlEventValueChanged 与 UISegmentedControls 一起使用。
【讨论】:
问题是如果值发生了变化,那么显然用户还没有触及已经选择的项目。 同意这不能回答你的问题,但它确实帮助了我,所以我投了赞成票。以上是关于我可以为 UISegmentedControl 覆盖 UIControlEventTouchUpInside 吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用自动布局的情况下设置 UISegmentedControl 子类的高度?
如何在iPhone中将图像设置为UISegmentedControl?
在 UISegmentedControl 上选择和取消选择段?