首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》20.1 使用用户首选字体

关灯直达底部

动态字体的使用方法非常简单,首先根据文本样式创建一个UIFont对象,然后将其设置为文本控件的字体就可以了(例如UILabel和UITextField的font属性)。下面就更新BNRDetailViewController,在代码中使用动态字体。

由于本章会设置界面中所有UILabel对象和UITextField对象的font属性,而其中三个UILabel对象没有对应的插座变量,因此需要在BNRDetailViewController.m的类扩展中为三个UILabel对象设置插座变量,代码如下:

@interface BNRDetailViewController ()

@property (nonatomic, strong) UIPopoverController *imagePickerPopover;

@property (weak, nonatomic) IBOutlet UITextField *nameField;

@property (weak, nonatomic) IBOutlet UITextField *serialNumberField;

@property (weak, nonatomic) IBOutlet UITextField *valueField;

@property (weak, nonatomic) IBOutlet UILabel *dateLabel;

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@property (weak, nonatomic) IBOutlet UIToolbar *toolbar;

@property (weak, nonatomic) IBOutlet UIBarButtonItem *cameraButton;

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@property (weak, nonatomic) IBOutlet UILabel *serialNumberLabel;

@property (weak, nonatomic) IBOutlet UILabel *valueLabel;

@end

然后添加一个方法,为正文(UIFontTextStyleBody)的UIFont对象创建文本样式,再赋给所有UILabel对象和UITextField对象的font属性,代码如下:

- (void)updateFonts

{

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

self.nameLabel.font = font;

self.serialNumberLabel.font = font;

self.valueLabel.font = font;

self.dateLabel.font = font;

self.nameField.font = font;

self.serialNumberField.font = font;

self.valueField.font = font;

}

接下来在viewWillAppear:中调用updateFonts方法,当UILabel对象将要出现在屏幕上时,修改它们的字体:

self.imageView.image = imageToDisplay;

[self updateFonts];

}

preferredFontForTextStyle:方法会根据用户首选字体和传入的文本样式返回对应的UIFont对象。构建并运行应用,这时界面还不会发生变化。

下面修改用户首选字体。按下iOS设备的Home键(如果是iOS模拟器,选择硬件→首页),然后打开设置应用,选择通用(General)→文字大小(Text Size),将滑块拖曳到最左端,设置用户首选字体为最小值(见图20-3)。

图20-3 修改用户首选字体大小

现在回到Homepwner的BNRDetailViewController界面,可以发现,界面中的文本控件并没有根据用户首选字体调整文字大小。这是因为,当应用从后台返回到前台运行时,BNRDetailViewController没有再次收到viewWillAppear:消息,所以没有及时更新文本控件的字体。为了解决该问题,必须设法观察并响应用户首选字体的改变。