在突出显示时更改UIButton边框颜色

Joh*_*ham 23 iphone objective-c uibutton border-color ios

我有一个简单的自定义UIButton,我添加了:

button.layer.bordercolor = [[UIColor blueColor]CGColor];
Run Code Online (Sandbox Code Playgroud)

但是,我想在突出显示按钮时更改.bordercolor.我尝试在按钮的touchDown动作中添加动作,将.bordercolor更改为红色,但是当用户抬起手指时,它会保持红色而不是返回蓝色.有任何想法吗?

Mic*_*lum 40

你走在正确的轨道上.检查下面的代码,它详细说明了这一点,但您要做的是将选择器链接到按钮上的不同控件事件.一个用于touchDown将阴影更改为红色,另一个用于touchUpInside在抬起手指时更改阴影.

另外,我看到你已经在Stack Overflow上提出了几个问题,并且尚未将其标记为正确的答案.要继续在本网站上获得帮助,您需要开始标记问题的正确答案.

[myButton addTarget:self action:@selector(highlightBorder) forControlEvents:UIControlEventTouchDown];
[myButton addTarget:self action:@selector(unhighlightBorder) forControlEvents:UIControlEventTouchUpInside];


- (void)highlightBorder
{
    myButton.layer.borderColor = [[UIColor redColor]CGColor];
}

- (void)unhighlightBorder
{
    myButton.layer.borderColor = [[UIColor blueColor]CGColor];
    //additional code for an action when the button is released can go here.
}
Run Code Online (Sandbox Code Playgroud)

注: 其他选项UIControlEvents包括:

enum {
   UIControlEventTouchDown           = 1 <<  0,
   UIControlEventTouchDownRepeat     = 1 <<  1,
   UIControlEventTouchDragInside     = 1 <<  2,
   UIControlEventTouchDragOutside    = 1 <<  3,
   UIControlEventTouchDragEnter      = 1 <<  4,
   UIControlEventTouchDragExit       = 1 <<  5,
   UIControlEventTouchUpInside       = 1 <<  6,
   UIControlEventTouchUpOutside      = 1 <<  7,
   UIControlEventTouchCancel         = 1 <<  8,

   UIControlEventValueChanged        = 1 << 12,

   UIControlEventEditingDidBegin     = 1 << 16,
   UIControlEventEditingChanged      = 1 << 17,
   UIControlEventEditingDidEnd       = 1 << 18,
   UIControlEventEditingDidEndOnExit = 1 << 19,

   UIControlEventAllTouchEvents      = 0x00000FFF,
   UIControlEventAllEditingEvents    = 0x000F0000,
   UIControlEventApplicationReserved = 0x0F000000,
   UIControlEventSystemReserved      = 0xF0000000,
   UIControlEventAllEvents           = 0xFFFFFFFF
};
Run Code Online (Sandbox Code Playgroud)


use*_*170 12

SWIFT 2.X回答您的问题:

➜使用"didSet"观察者覆盖突出显示的属性.

override var highlighted: Bool {
    didSet {

        switch highlighted {
        case true:
            layer.borderColor = UIColor.lightGrayColor().CGColor
        case false:
            layer.borderColor = UIColor.blackColor().CGColor
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

override var isHighlighted: Bool {
    didSet {

        switch isHighlighted {
        case true:
            layer.borderColor = UIColor.lightGray.cgColor
        case false:
            layer.borderColor = UIColor.black.cgColor
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_* B. 9

您可以在UIButton子类中覆盖setHighlightedsetSelected方法.从那里你只需调整边框颜色如下:

- (void)setHighlighted:(BOOL)highlighted {

    [super setHighlighted:highlighted];

    [self tweakState:highlighted];
}

- (void)setSelected:(BOOL)selected {

    [super setSelected:selected];

    [self tweakState:selected];
}

- (void)tweakState:(BOOL)state {

    if (state) {
        self.layer.borderColor = [_highlightedBorderColor CGColor];
    }
    else {
        self.layer.borderColor = [_defaultBorderColor CGColor];
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

斯威夫特4

override var isHighlighted: Bool {
    didSet {
        layer.borderColor = isHighlighted ? UIColor.lightGray.cgColor : UIColor.black.cgColor
    }
}
Run Code Online (Sandbox Code Playgroud)