我正在尝试设置所有文本字段:
CGRect frameRect2 = _lastname_field.frame;
frameRect2.size.height = 30;
_lastname_field.font = [UIFont fontWithName:@"AppleGothic" size:15];
_lastname_field.frame = frameRect2;
_lastname_field.backgroundColor= [UIColor whiteColor];
_lastname_field.layer.cornerRadius = 5.0;
[_lastname_field.layer setBorderColor: [[UIColor grayColor] CGColor]];
[_lastname_field.layer setBorderWidth: 1.0];
_lastname_field.clipsToBounds = YES;
那个领域看起来很棒。唯一的问题是,整个应用程序中有超过50个文本字段。有没有一种简单的方法可以用同样的方式设置所有这些样式?其中一些甚至没有合成/命名。
谢谢!
答案 0 :(得分:9)
1)如果您在代码中创建文件,我会创建一个工厂类,其界面如下:
@interface MyTextFieldFactory : NSObject
+ (UITextField*)createStyledTextField;
@end
2)如果使用Interface Builder 创建TextFields ,则可以在UITextField上编写一个仅实现awakeFromNib:
的类别。在那里你做了所有的自定义。这不需要更改代码,也不需要在nib文件中进行更改。
答案 1 :(得分:3)
将UITextField子类化,并在initWithFrame方法中添加自定义。在您调用super的自定义类中添加initWithCoder方法并返回[self initWithFrame:[self frame]]。然后在Interface Builder中为每个文本字段更改类。
会是这样的:
// MyUITextField.h
@interface MyUITextField : UITextField {
// Your IVars
}
@property (retain, readonly) float value;
@end
// MyUITextField.m
@implementation MyClass
- (id)initWithCoder:(NSCoder *)decoder {
[super initWithCoder:decoder];
return [self initWithFrame:[self frame]];
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Your customization
}
}
@end
答案 2 :(得分:2)
除了图层内容之外,您应该可以为所有属性执行此操作...
你的AppDelegate中的添加类似......的方法
- (void)changeAppearances
{
[[UITextField appearance] setFont:[UIFont fontWithName:@"AppleGothic" size:15]];
[[UITextField appearance] setBackgroundColor:[UIColor whiteColor]];
}
等等。
这将设置应用中所有UITextField实例的外观。 (只要你不在代码中覆盖它们)。
答案 3 :(得分:1)
好的,如果外观不起作用,那么你的下一个最好的选择就是写一个类别为你做这个。
子类化是可能的但不理想,因为有可能覆盖你不应该的东西(反之亦然)。
将一个文件添加到项目中并选择Category类型并将该类设置为UITextField。
在类别中添加类似......的功能
- (void)configureTextFieldWithFrame:(CGRect)frame;
然后在.m文件中你可以......
- (void)configureTextFieldWithFrame:(CGRect)frame
{
self.font = [UIFont fontWithName:@"AppleGothic" size:15];
self.frame = frame;
self.backgroundColor= [UIColor whiteColor];
self.layer.cornerRadius = 5.0;
[self.layer setBorderColor: [[UIColor grayColor] CGColor]];
[self.layer setBorderWidth: 1.0];
self.clipsToBounds = YES;
}
然后你需要#import UITextField+Configure.h
(或者你的categoyr被称为。
然后在您的代码中用...替换您的代码
[_lastname_field configureTextFieldWithFrame:frameRect2];
这将运行您的类别功能。
答案 4 :(得分:1)
我同意Fogmeister在代码中创建的文本字段。但是如果你在Storyboards中布置文本字段,那么这种方法将不起作用(因为每个字段都明确定义了它的属性)。但有一种简单的方法可行。
右键单击故事板并“打开为...”源代码。这将SB的XML表示放在编辑器窗口中。在那里,您可以使用编辑器全局(和/或有选择地)更改文本字段属性(或复制到您选择的XML编辑器)。
公平警告,如果您在SB中引入错误以防止编译,则可能会终止您的项目 - 因此请务必小心并确保为您的SB备份。但如果你在每次改变后检查,这种技术可以很好地工作。
搜索“<textField
”以找到类似内容:
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="name" minimumFontSize="17" clearButtonMode="whileEditing" id="F9N-Tb-KTd">
<rect key="frame" x="176" y="301" width="472" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="words" enablesReturnKeyAutomatically="YES"/>
<connections>
<action selector="changeName:" destination="4" eventType="editingDidEnd" id="bLg-iM-m8a"/>
</connections>
</textField>
找到一个具有您喜欢的fontDescription属性的文本字段,而不是。然后使用相应的属性替换要更改的fontDescription属性。请务必将更改限制为字体,大小和背景等内容。请勿更改id,rect或其他任何需要对文本字段唯一的内容。
我希望这对你有用,对我来说这是一个非常方便的技巧,可以确保我的所有文本字段都有一致的排版。
(要恢复正常视图,“打开为...”界面生成器 - 故事板)
祝你好运!