如何检测已选择的UIBarButtonItem上的触摸?

时间:2009-11-22 09:43:03

标签: iphone

如何检测已选择的UIBarButtonItem上的触摸? 如果我触摸UIBarButtonItem,它将被选中..但如果我再次触摸相同, 我怎么识别它?有什么帮助吗?

代码如下.initWithCustomView:sortToggle,其中sortToggle是分段控件...

 UIBarButtonItem *sortToggleButtonItem = [[UIBarButtonItem alloc] 
                                         initWithCustomView:sortToggle];
 [sortToggle release];

 UIBarButtonItem *flexibleSpaceButtonItem = [[UIBarButtonItem alloc] 
                  initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                       target:nil
                                       action:nil];

 NSArray *buttonArray = [NSArrayarrayWithObjects:flexibleSpaceButtonItem, 
                                                 sortToggleButtonItem, 
                                                 flexibleSpaceButtonItem, nil];

 [self setToolbarItems: buttonArray animated:YES];

2 个答案:

答案 0 :(得分:1)

UIBarButtonItem不会从UIResponder继承,因此您无法直接获取touchesBegan / touchingEnded等事件。如果将UISegmentedControl设置为瞬时(yourSegControl.momentary = YES),则可以多次选择一个按钮。这对你的情况有帮助吗?

否则,您可能应该继承UISegmentedControl(继承自UIResponder)并自己处理额外的触摸(不要忘记在您覆盖的任何触摸方法中调用super)。

答案 1 :(得分:0)

我需要能够检测用户何时选择了已选择的索引,并且我发现问题是 UISegmentedControl 仅触发 UIControlEventValueChanged 事件。我希望能够获得 UIControlEventTouchUpInside 事件,以便我可以做点什么。

解决方案是继承 UISegmentedControl 并覆盖触摸事件以触发您想要的事件。

创建 UISegmentedControl 的子类并覆盖 touchesBegan:withEvent: ...

/* MySegmentedControl.m, a subclass of UISegmentedControl... */
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  //dont forget to call super!
  [super touchesBegan:touches withEvent:event];
  //fire the event we want to listen to
  [self sendActionsForControlEvents:UIControlEventTouchUpInside];
}

然后听取你的分段控件的 UIControlEventTouchUpInside 而不是 UIControlEventValueChanged ,这样你只能触发一个事件......否则它会自然地触发一次UIControlEventValueChanged事件,一旦你开火,你就会得到两件事(你显然不想要)。

[mySegmentedControlInstance addTarget:self action:@selector(mySegmentedControlSelected:) forControlEvents:UIControlEventTouchUpInside]

这样,每次触摸控件时都会触发一次事件,而不仅仅是当值被更改时。