2012-04-01 80 views

回答

12

你可以使用志愿

[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:@"new"]; 
     NSNumber *old = [change objectForKey:@"old"]; 

     if (old && [new isEqualToNumber:old]) { 
      NSLog(@"Highlight state has not changed"); 
     } else { 
      NSLog(@"Highlight state has changed to %d", [object isHighlighted]); 
     } 
    } 
} 

你只真正关心的变化,这将被称为每次例如状态变化如果你选择移动,然后用你的手指仍然向下拖动到按钮之外

+0

这正是我一直在寻找前的亮状态!谢谢! – arnoapp 2012-04-01 22:20:36

1

是否这样?

self.testButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[self.testButton addTarget:self action:@selector(methodOne) forControlEvents:UIControlEventTouchDown]; 
[self.testButton addTarget:self action:@selector(methodTwo) forControlEvents:UIControlEventTouchUpInside]; 
+0

没有这不起作用,因为按钮离开高亮状态时,它执行TouchUpInside动作之前(至少我是这么认为的测试后,猜测... ) – arnoapp 2012-04-01 21:39:11

+1

这不是那样干净,当你可以做这样的事情拖出按钮导致按钮失去它的亮点 – 2012-04-01 21:39:19

+0

要使用拖动外占优势的情况下,你可以在最后一行改为:[self.testButton addTarget :self action:@selector(t2 :) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; – 2012-04-01 21:50:22