如何检测已选择的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];
答案 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]
这样,每次触摸控件时都会触发一次事件,而不仅仅是当值被更改时。