是否可以编辑 UIAlertAction 标题字体大小和样式?

Posted

技术标签:

【中文标题】是否可以编辑 UIAlertAction 标题字体大小和样式?【英文标题】:Is it possible to edit UIAlertAction title font size and style? 【发布时间】:2014-09-23 06:48:39 【问题描述】:

现在 ios8 已弃用 UIActionsheetUIAlertview,iOS7 上的自定义不再生效。到目前为止,我知道的唯一定制是色调。我需要的是更改标题的字体大小和样式,我还没有找到任何使用新的UIAlertAction 的方法。

Already referred to this 但我仍然希望有办法至少更改标题大小和字体。

为您提供我的一些UIAlertAction的代码

UIAlertController * alertActionSheetController = [UIAlertController alertControllerWithTitle:@"Settings"
                                                                              message:@""
                                                                       preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction * aboutTheAppAction = [UIAlertAction actionWithTitle:@"About the App"
                                                                 style:UIAlertActionStyleDefault
                                                               handler:^(UIAlertAction * action)
                                                                   NSLog(@"About the app");
                                                                   [self openAbout];

                                                               ];


[alertActionSheetController addAction:aboutTheAppAction];
[self presentViewController:alertActionSheetController animated:YES completion:nil];

【问题讨论】:

看看这个github.com/ianb821/IBActionSheet 这对两者都适用,因为它由 uiview 的一个新子类组成,但我正在寻找的是编辑警报操作样式的方法。 【参考方案1】:

您可以更改 UIAlertAction 的字体和颜色。 首先你需要添加 UILabel 类别

@interface UILabel (FontAppearance)
@property (nonatomic, copy) UIFont * appearanceFont UI_APPEARANCE_SELECTOR;
@end

@implementation UILabel (FontAppearance)

-(void)setAppearanceFont:(UIFont *)font 
    if (font)
        [self setFont:font];


-(UIFont *)appearanceFont 
    return self.font;


@end

类别文件也上传到以下 URL https://www.dropbox.com/s/em91fh00fv3ut4h/Archive.zip?dl=0

导入该文件后,您需要调用以下函数。

UILabel * appearanceLabel = [UILabel appearanceWhenContainedIn:UIAlertController.class, nil];
[appearanceLabel setAppearanceFont:yourDesireFont]]; 

以上代码在颜色和字体上进行了测试。并且仅适用于 iOS8 或更高版本。

【讨论】:

这会改变 UIAlertController 视图中所有标签的字体。 感谢为我工作。我确实将它放入了我已经拥有的自己的 UILabel 类别中,并且属性声明进入了 .h 我将这些新选择器的方法声明放在了 .h 中,我在使用 UIAlertController 的地方导入了 .h 嘿谢谢你的解决方案只有一个查询...我们如何使用上述类别更改标题颜色。【参考方案2】:

可以使用私有 API 更改警报操作的字体。它可能会让你的应用被拒绝,我还没有尝试提交这样的代码。

let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)

let action = UIAlertAction(title: "Some title", style: .Default, handler: nil)let attributedText = NSMutableAttributedString(string: "Some title")

let range = NSRange(location: 0, length: attributedText.length)
attributedText.addAttribute(NSKernAttributeName, value: 1.5, range: range)
attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "ProximaNova-Semibold", size: 20.0)!, range: range)

alert.addAction(action)

presentViewController(alert, animated: true, completion: nil)

// this has to be set after presenting the alert, otherwise the internal property __representer is nil
guard let label = action.valueForKey("__representer")?.valueForKey("label") as? UILabel else  return 
label.attributedText = attributedText

【讨论】:

以上是关于是否可以编辑 UIAlertAction 标题字体大小和样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何编辑 UIAlertAction 文本字体大小和颜色

UIAlertAction 值列表

如何在 UIAlertController 中更改 UIAlertAction 的字体大小和颜色

是否可以为NSString设置自定义字体和大小?

UIAlertAction 可以触发函数吗?

Swift 3.0 中的 UIAlertAction 内的 UIAlertView ?