【发布时间】:2012-04-01 21:13:34
【问题描述】:
我想在按钮突出显示时执行一个操作,并在它离开突出显示状态时执行另一个操作。有什么建议吗?
【问题讨论】:
我想在按钮突出显示时执行一个操作,并在它离开突出显示状态时执行另一个操作。有什么建议吗?
【问题讨论】:
你可以使用 KVO
[button addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
然后
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([@"highlighted" isEqualToString:keyPath]) {
NSNumber *new = [change objectForKey:NSKeyValueChangeNewKey];
NSNumber *old = [change objectForKey:NSKeyValueChangeOldKey];
if (old && [new isEqualToNumber:old]) {
NSLog(@"Highlight state has not changed");
} else {
NSLog(@"Highlight state has changed to %d", [object isHighlighted]);
}
}
}
您只真正关心更改,并且每次状态更改时都会调用它,例如如果您移动选择,然后用手指仍然向下拖动到按钮之外
【讨论】:
像这样?
self.testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.testButton addTarget:self action:@selector(methodOne) forControlEvents:UIControlEventTouchDown];
[self.testButton addTarget:self action:@selector(methodTwo) forControlEvents:UIControlEventTouchUpInside];
【讨论】:
UIControlEventTouchUpInside|UIControlEventTouchUpOutside 不会捕捉到按钮在拖到外面时变得未突出显示