【问题标题】:Call method when Button leaves Highlighted StateButton离开高亮状态时调用方法
【发布时间】:2012-04-01 21:13:34
【问题描述】:

我想在按钮突出显示时执行一个操作,并在它离开突出显示状态时执行另一个操作。有什么建议吗?

【问题讨论】:

    标签: iphone ios uibutton


    【解决方案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 不会捕捉到按钮在拖到外面时变得未突出显示
    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 2013-02-01
    • 2012-08-17
    • 2019-06-18
    相关资源
    最近更新 更多