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离开高亮状态时调用方法的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在离开带有JSF或PrimeFaces的页面时调用方法?

如何使用Angular 5在单击按钮时调用多个方法?

从“视图”单击按钮时调用“控制器”方法

空异常颤动时调用了方法“[]”

IOS中button的选中和高亮的区别

无论如何将参数传递给按下 Gtkmm 按钮时调用的方法?