的iOS 7.1包括一个新的辅助功能的设置要求,导致一些按钮上的文字被自动加下划线的按钮形状。有没有一种方法来检测这种模式下,或自定义为个人UIButton
s?
(这允许改变按钮标签,如破折号或下划线,以便强调时候,他们不看像一个等号,等等)
它看起来像你可以请求按钮标签的属性和测试,看它是否包含一个NSUnderlineStyleAttributeName属性。如果删除NSUnderlineStyleAttributeName属性,系统就会把它的右后卫如此看来,关键是要在标签的下划线属性明确设置为0。我已经添加了以下到我的自定义按钮:
- (void) adjustLabelProperties // override underline attribute
{
NSMutableAttributedString *attributedText = [self.titleLabel.attributedText mutableCopy];
[attributedText addAttribute: NSUnderlineStyleAttributeName value: @(0) range: NSMakeRange(0, [attributedText length])];
self.titleLabel.attributedText = attributedText;
}
我知道这是一个老问题,但此代码的工作。经测试,在iOS版9.3
NSMutableAttributedString *attrStr = [btn.titleLabel.attributedText mutableCopy];
[attrStr enumerateAttributesInRange:NSMakeRange(0, [attrStr length])
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
usingBlock:^(NSDictionary *attributes, NSRange range, BOOL *stop) {
NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
if([mutableAttributes objectForKey:NSUnderlineStyleAttributeName] != nil) {
//It's enabled for this button
}
}];
要禁用按钮的形状为一个特定的按钮
[btn.titleLabel.attributedText addAttribute: NSUnderlineStyleAttributeName value: @(0) range: NSMakeRange(0, [attributedText length])];
老问题,但希望这可以帮助别人。目前仍然因为如果按钮形状是iOS上启用检查没有内置的方法,所以我们增加了这一点:
#pragma mark - Accessibility
/**
* There's currently no built-in way to ascertain whether button shapes is enabled.
* But we want to manually add shapes to certain buttons when it is.
*/
static BOOL _accessibilityButtonShapesEnabled = NO;
+ (BOOL)accessibilityButtonShapesEnabled {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self checkIfButtonShapesEnabled];
});
return _accessibilityButtonShapesEnabled;
}
+ (void)checkIfButtonShapesEnabled {
UIButton *testButton = [[UIButton alloc] init];
[testButton setTitle:@"Button Shapes" forState:UIControlStateNormal];
_accessibilityButtonShapesEnabled = (BOOL)[(NSDictionary *)[testButton.titleLabel.attributedText attributesAtIndex:0 effectiveRange:nil] valueForKey:NSUnderlineStyleAttributeName];
}
因为也没有通知如果的按钮形状被禁用/而启用应用程序正在运行,我们在checkIfButtonShapesEnabled
运行applicationDidBecomeActive:
,如果该值已更改推动我们自己的通知。这应该适用于所有情况,因为它是目前不可能按钮形状切换添加到“无障碍快捷方式”。
我有同样的问题,我没有发现官方的解决方案。所以,我发现,直到苹果公司唯一的解决方法释放一个解决方案是使一个UIToolbar成图像,并检查按钮显示下划线:
+ (BOOL)isUsesButtonShapes {
BOOL result = FALSE;
CGRect rect = CGRectMake(0, 0, 320, 44);
CGPoint point = CGPointMake(26, 33);
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:rect] autorelease];
toolbar.backgroundColor = [UIColor whiteColor];
toolbar.tintColor = [UIColor darkGrayColor];
toolbar.barTintColor = [UIColor whiteColor];
[toolbar setItems:@[[[[UIBarButtonItem alloc] initWithTitle:@"Test" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease]]];
toolbar.barStyle = UIBarStyleDefault;
toolbar.translucent = FALSE;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[toolbar.layer renderInContext:context];
int bpr = CGBitmapContextGetBytesPerRow(context);
unsigned char *data = CGBitmapContextGetData(context);
if (data != NULL) {
int offset = (int) (bpr * point.y + 4 * point.x);
int blue = data[offset + 0];
result = blue < 250;
}
UIGraphicsEndImageContext();
return result;
}
它基本上只是渲染UIToolbar成图像:
然后它检查是否有在下的“T”的像素中的下划线。我知道,这很容易断裂,如果苹果改变了UIToolbar是如何呈现的方式。但是,也许这种方法可以改善,至少比没有好?对不起,这不是一个很好的解决方案,但我没有找到更好的东西呢。
这仅仅是半有关,但我有种“推出自己的”为按钮的形状,使选项可通过设置菜单的用户。
我不被“当场就”关于这个问题深表歉意,但是这是我结束了与思考同样的问题。
(这个例子被设置为始终使用一个半圆的圆角无论大小 - 请修改为你想)。
-(void)setBorderForButton:(UIButton*)theButton withSetting:(BOOL)theSetting{
if (theSetting == YES){
theButton.layer.cornerRadius = theButton.frame.size.height/2;
theButton.layer.borderWidth = 1;
theButton.layer.borderColor = [UIColor yourDesiredColor].CGColor;
theButton.clipsToBounds = YES;
}
}
我转换的代码从this交到夫特(4.2):
import UIKit
public extension UIAccessibility {
public static var isButtonShapesEnabled: Bool {
let button = UIButton()
button.setTitle("Button Shapes", for: .normal)
return button.titleLabel?.attributedText?.attribute(NSAttributedString.Key.underlineStyle, at: 0, effectiveRange: nil) != nil
}
}
用法:
if UIAccessibility.isButtonShapesEnabled {
// Apply button shapes style to custom button...
}
测试和iOS的12个工作。
最初发布于我自己的问题:Click