我可以为 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 样式

在 UISegmentedControl 上选择和取消选择段?

我可以将 pushViewController 与 UISegmentedControl 一起使用吗?

UISegmentedControl 重新加载某个页面