我在向空的UITextField分配文本属性(字体,颜色,字距调整)时遇到问题。以下是一些示例代码:
// testinput is an UITextField created in storyboard
//
[testinput setDefaultTextAttributes: @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0], NSForegroundColorAttributeName: [UIColor redColor]} ];
理论上应该改变字体&颜色,但没有任何反应。我也尝试了不同的创建字典的方法,没有变化。请不要建议使用属性字符串,UITextField最初必须为空。
任何帮助都将不胜感激。
答案 0 :(得分:4)
阅读Gregs评论后找到解决方案。 要在空UITextField中设置初始属性,请使用
@property(nonatomic, copy) NSDictionary *typingAttributes
属性。它必须在UITextField的一个委托方法中设置:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSDictionary* d = textField.typingAttributes;
NSMutableDictionary* md = [NSMutableDictionary dictionaryWithDictionary:d];
md[NSFontAttributeName] = [UIFont systemFontOfSize:30];
md[NSKernAttributeName] = @(9.5f);
textField.typingAttributes = md;
return YES;
}
答案 1 :(得分:0)
如果使用setDefaultTextAttributes,则更改将应用于UITextField的textAttribute而不是text属性。因此,如果您想使用text属性,并且我认为您希望使用它,请尝试:
testinput.fort = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0];
testinput.textColor = [UIColor redColor]
//扩展
我担心你不能以你想要的方式使用它。 这来自Apple文档:
By default, this property returns a dictionary of text attributes with default values.
Setting this property applies the specified attributes to the entire text of the text field. Unset attributes maintain their default values.
看起来当你使用defaultTextAttributes属性时,你只会获得一个字典,如果你想设置它,你必须创建属性字符串(字典):
答案 2 :(得分:0)
Swift 4版本
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let currentAttributes = textField.typingAttributes
if var attributes = currentAttributes {
attributes[NSAttributedStringKey.foregroundColor.rawValue] = UIColor.white
attributes[NSAttributedStringKey.font.rawValue] = UIFont.systemFont(ofSize: 26)
textField.typingAttributes = attributes
}
return true
}