更改UIActionSheet标题字符串的字体类型和大小(Change font type and

2019-07-30 14:15发布

我有一个标题字符串UIActionSheet“DO:这些任务”。 在标题字符串,子串“DO:”应该大胆(与特定的字体大小)和串“这些任务”应该是定期。 可能吗? 我怎样才能做到这一点?

Answer 1:

我假设你有一个实现类UIActionSheetDelegate协议和你的类是委托类的电流UIActionSheet ,所以在这个类,你可以改变整个标题UIActionSheet

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    for (UIView *_currentView in actionSheet.subviews) {
        if ([_currentView isKindOfClass:[UILabel class]]) {
            [((UILabel *)_currentView) setFont:[UIFont boldSystemFontOfSize:15.f]];
        }
    }
}

但至于你看你有没有机会来格式化的部分UILabel对象的text属性。


您可以添加一个新UILabel为您actionsheet现在使用不同的字体,如果你想看到粗体文字DO:串...但是从这里的限制是你的想象力而已,你可以格式化UIActionSheet的元素中此方法或内部-didPresentActionSheet:方法为好。

所以这将是这个的想法

UPDATE于2013年10月7日

在iOS7我们真的没有一个的子视图直接访问 UIAlertView UIActionSheet 对象,因此该方案可能不会对iOS7环境正常工作。

如果你有任何问题上iOS7,请其发表评论给我! 谢谢。

UPDATE在2014年6月22日

我还没有找到任何解决办法,直接用新做这种事UIAlertController在iOS8上,标题标签看起来是在整个视图层次结构不可见UIAlertController ,既看不见它出现,甚至前后。

注:我也想通了,它不禁止重叠/覆盖它的内容,它出现在屏幕上 目前这是不可能预测它会在测试版或者它是否是AppStore的安全工作。

注:请您牢记视图生命周期的时间表,而不要试图呈现任何内容在一个视图或视图CONTROLER如果不是在导航堆栈了。

无论如何,这里是一个迅速解决,我怎么能到达层,我可以我自定义视图添加到它。

let alertController: UIAlertController = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(alertController, animated: true, completion: {
    let aboveBlurLayer: UIView = alertController.view.subviews[0] as UIView
    let belowBlurLayer: UIView = (aboveBlurLayer.subviews[0].subviews as Array<AnyObject>)[0] as UIView
    let customView: UIView = UIView(frame: aboveBlurLayer.bounds)
    customView.backgroundColor = UIColor.redColor()
    aboveBlurLayer.addSubview(customView)
    })

注意:它可能是自定义内容添加到一个警报/ actionsheet有用的,但是如果它不能在今后的工作中,我会更新我的答案。



Answer 2:

对于iOS 7的下面的代码将正常工作。

实施UIActionSheetDelegate如下

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    [actionSheet.subviews enumerateObjectsUsingBlock:^(id _currentView, NSUInteger idx, BOOL *stop) {
        if ([_currentView isKindOfClass:[UIButton class]]) {
            [((UIButton *)_currentView).titleLabel setFont:[UIFont boldSystemFontOfSize:15.f]];
            // OR
            //[((UIButton *)_currentView).titleLabel setFont:[UIFont fontWithName:@"Exo2-SemiBold" size:17]];
        }
    }];
}

对于iOS 6

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    for (UIView *_currentView in actionSheet.subviews) {
        if ([_currentView isKindOfClass:[UILabel class]]) {
            [(UILabel *)_currentView setFont:[UIFont boldSystemFontOfSize:15.f]];
            // OR
            //[(UILabel *)_currentView setFont:[UIFont fontWithName:@"Exo2-SemiBold" size:17]];
        }
    }
}


Answer 3:

基于Holex的回答:

两个iOS7及iOS6的下面很适合我改变UIActionSheet属性的称号。 请注意,我实际上添加一个新的子视图,因为对于未知? 原因更新当前的UILabel只给出了竖直半分的文本? 此外“标题”是apparantly第一的UILabel,所以我们一个变化后跳出循环。

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    for (UIView *_currentView in actionSheet.subviews) {
        if ([_currentView isKindOfClass:[UILabel class]]) {
            UILabel *l = [[UILabel alloc] initWithFrame:_currentView.frame];
            l.text = [(UILabel *)_currentView text];
            [l setFont:[UIFont fontWithName:@"Arial-BoldMT" size:20]];
            l.textColor = [UIColor darkGrayColor];
            l.backgroundColor = [UIColor clearColor];
            [l sizeToFit];
            [l setCenter:CGPointMake(actionSheet.center.x, 25)];
            [l setFrame:CGRectIntegral(l.frame)];
            [actionSheet addSubview:l];
            _currentView.hidden = YES;
            break;
        }
    }
}

上述似乎在iOS6的和iOS7模拟器工作。 我不知道这是否会与其他iOS的未来版本的工作,虽然。



Answer 4:

下面可能是有用的。

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet
{
    [actionSheet.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[UIButton class]]) {
            UIButton *button = (UIButton *)obj;
            button.titleLabel.font = [UIFont systemFontOfSize:15];
        }
    }];

}


Answer 5:

看到这些链接。而使用它。 ohattributedlabel

http://www.cocoacontrols.com/platforms/ios/controls/ohattributedlabel



Answer 6:

还有的内部属性UIActionSheet称为_titleLabel所以它有可能获得一个参考和这个标签的属性串属性中直接更改。

请注意,这是私人API中可能会在应用程序商店被拒绝。

下面是它的工作原理:

- (NSAttributedString *) actionSheetAttributedTitle;
{
    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:@"Test"];
    UIFont *font=[UIFont fontWithName:@"Helvetica-Bold" size:13.0f];
    [attString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attString.length)];
    [attString addAttribute:NSForegroundColorAttributeName
                  value:[UIColor blackColor]
                  range:NSMakeRange(0, attString.length)];
    return [attString copy];
}

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet;
{
    UILabel *sheetTitleLabel;
    if([actionSheet respondsToSelector:@selector(_titleLabel)]) {
        sheetTitleLabel = objc_msgSend(actionSheet, @selector(_titleLabel));
        sheetTitleLabel.attributedText = [self actionSheetAttributedTitle];

    }
}


文章来源: Change font type and size of UIActionSheet title string