gpt4 book ai didi

iphone - 突出显示自定义 UIButton

转载 作者:行者123 更新时间:2023-12-03 19:10:55 29 4
gpt4 key购买 nike

我正在构建的应用程序有很多自定义 UIButtons,位于布局相当精确的图像之上。按钮式的、控制式的图像和标签等等,但上面有一个清晰的自定义风格的 UIButton 来处理点击。

我的客户昨天说,“我希望当你点击它时它会突出显示”。别介意它会立即推送一个新的 uinavigationcontroller View ……它没有眨眼,所以他很困惑。哦。

这是我为解决这个问题所做的事情。我不喜欢这样,但这就是我所做的:

我对 UIButton 进行了子类化(将其命名为 FlashingUIButton)。

出于某种原因,我无法仅在突出显示的控制模式下将其配置为背景图像。它似乎从未达到“突出显示”的状态。不知道为什么会这样。

所以我写道:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self setBackgroundImage:[UIImage imageNamed:@"grey_screen"] forState:UIControlStateNormal];
[self performSelector:@selector(resetImage) withObject:nil afterDelay:0.2];
[super touchesBegan:touches withEvent:event];
}

-(void)resetImage
{
[self setBackgroundImage:nil forState:UIControlStateNormal];
}

当点击按钮时,这会愉快地将我的 grey_screen.png(一个 30% 不透明的黑框)放在按钮上,并在 0.2 秒后将其替换为愉快的空虚。

这很好,但这意味着我必须检查所有的 Nib 并将所有按钮从 UIButtons 更改为 FlashingUIButtons。这并不是世界末日,但我真的希望将其作为一个 UIButton 类别来解决,一石二鸟。

有什么比这个更好的方法建议吗?

最佳答案

您可以使用手势识别器拦截触摸事件,然后以编程方式将识别器添加到所有 uibuttons。例如:

//
// HighlighterGestureRecognizer.h
// Copyright 2011 PathwaySP. All rights reserved.
//

#import <Foundation/Foundation.h>


@interface HighlightGestureRecognizer : UIGestureRecognizer {
id *beganButton;
}

@property(nonatomic, assign) id *beganButton;

@end

以及实现:

//
// HighlightGestureRecognizer.m
// Copyright 2011 PathwaySP. All rights reserved.
//

#import "HighlightGestureRecognizer.h"


@implementation HighlightGestureRecognizer

@synthesize beganButton;

-(id) init{
if (self = [super init])
{
self.cancelsTouchesInView = NO;
}
return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.beganButton = [[[event allTouches] anyObject] view];
if ([beganButton isKindOfClass: [UIButton class]]) {
[beganButton setBackgroundImage:[UIImage imageNamed:@"grey_screen"] forState:UIControlStateNormal];
[self performSelector:@selector(resetImage) withObject:nil afterDelay:0.2];

}
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
}

- (void)reset
{
}

- (void)ignoreTouch:(UITouch *)touch forEvent:(UIEvent *)event
{
}

- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer
{
return NO;
}

- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer
{
return NO;
}

- (void)resetImage
{
[beganButton setBackgroundImage: nil forState:UIControlStateNormal];
}

@end

嗯。我没有测试这段代码,所以如果它不起作用,请不要起诉我,只需发表评论,我们会解决它。我只是写得很快,仅供引用。即使不起作用,逻辑也应该是合理的。

编辑:

忘记添加,将手势识别器添加到按钮的方式如下:

HighlighterGestureRecognizer * tapHighlighter = [[HighlighterGestureRecognizer alloc] init];

[myButton addGestureRecognizer:tapHighlighter];
[tapHighlighter release];

所以基本上你要声明它,初始化它,然后添加它。之后,您需要释放它,因为 addGestureRecognizer 会保留它。

关于iphone - 突出显示自定义 UIButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627154/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com