Button离开高亮状态时调用方法
Posted
技术标签:
【中文标题】Button离开高亮状态时调用方法【英文标题】:Call method when Button leaves Highlighted State 【发布时间】:2012-04-01 21:13:34 【问题描述】:我想在按钮突出显示时执行一个操作,并在它离开突出显示状态时执行另一个操作。有什么建议吗?
【问题讨论】:
【参考方案1】:你可以使用 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]);
您只真正关心更改,并且每次状态更改时都会调用它,例如如果您移动选择,然后用手指仍然向下拖动到按钮之外
【讨论】:
这正是我想要的!谢谢! NSKeyValueChangeNewKey, NSKeyValueChangeOldKey【参考方案2】:像这样?
self.testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.testButton addTarget:self action:@selector(methodOne) forControlEvents:UIControlEventTouchDown];
[self.testButton addTarget:self action:@selector(methodTwo) forControlEvents:UIControlEventTouchUpInside];
【讨论】:
不,这不起作用,因为按钮在执行 TouchUpInside 操作之前离开突出显示状态(至少这是我在测试后猜到的......) 它不像你可以做的那样干净,比如拖出按钮导致按钮失去突出显示 要考虑到外部拖动的边缘情况,您可以将最后一行更改为: [self.testButton addTarget:self action:@selector(t2:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];跨度> @AzzUrr1 你确定它会在执行操作之前离开高亮状态吗? @PaulHunter 更改UIControlEventTouchUpInside|UIControlEventTouchUpOutside
不会捕捉到按钮在拖到外面时变得未突出显示以上是关于Button离开高亮状态时调用方法的主要内容,如果未能解决你的问题,请参考以下文章