在iOS上覆盖appearanceWhenContainedIn

时间:2015-01-08 18:15:30

标签: ios objective-c uiviewcontroller

我的应用程序加载时会设置一些常规样式:

[[UITextField appearanceWhenContainedIn:[NRWindow class], nil] setTintColor:kBlueColor];
[[UITextField appearanceWhenContainedIn:[NRWindow class], nil] setFont:[UIFont fontWithName:kFontNameLatoRegular size:14]];
[[UILabel appearanceWhenContainedIn:[NRWindow class], nil] setFontName:kFontNameLatoRegular];

由于某种原因,它会影响占位符字体大小。 在特定视图中,我想使用以下代码覆盖这些样式(仅用于占位符):

 UIFont *font = [UIFont fontWithName:kFontNameLatoLight size:16];
 self.emailTextField.font = font;
 self.emailTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Email Address" attributes: @{ NSFontAttributeName:font}];

由于某种原因,占位符未获得正确的字体。 但是,如果我评论一般样式(appearanceWhenContainedIn)它的工作完美。有什么帮助吗?

由于

2 个答案:

答案 0 :(得分:0)

解决方案

注意:请注意,此修补程序仅在iOS 6.0及更高版本上进行过测试。

要解决此错误,您必须创建UITextField的子类并覆盖-setAttributedPlaceHolder以将结果存储在ivar中。然后,您必须覆盖-drawPlaceholderInRect方法并枚举属性并使用NSAttributedString + NSStringDrawing(唯一的iOS 6特定方法)的-drawAtPoint方法绘制文本。这允许支持自定义属性,这可以在推文设计时提供帮助。

http://engineering.meetme.com/2013/11/uitextfield-attributedplaceholder-doesnt-work/

答案 1 :(得分:-2)

外出的答案,请不要这样做,我们还有其他选择

使用递归函数获取UITextField然后设置props

extension UIView {

func recursive_applyTheme_Search(
    #dynamicTextStyle: NSString,
    bgColor: UIColor,
    cursorColor: UIColor,
    textColor: UIColor,
    placeholderTextColor: UIColor,
    borderColor: UIColor,
    borderWidth: CGFloat,
    cornerRadius: CGFloat) {

    for subview in self.subviews
    {
        if subview is UITextField {

            (subview as! UITextField).applyThemeForSearchBar(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius)
        }
        else { subview.recursive_applyTheme_Search(
                dynamicTextStyle: dynamicTextStyle,
                bgColor: bgColor,
                cursorColor: cursorColor,
                textColor: textColor,
                placeholderTextColor: placeholderTextColor,
                borderColor: borderColor,
                borderWidth: borderWidth,
                cornerRadius: cornerRadius) }
    }

}
}