用户修改了首选字体大小后,应用会收到UIContentSizeCategoryDidChangeNotification通知,可以注册该通知响应用户首选字体的改变,例如更新界面中文本控件的字体。
打开BNRDetailViewController.m,在initForNewItem:中将BNRDetailViewController对象注册为UIContentSizeCategoryDidChangeNotification的观察者,然后在dealloc中移除观察者,代码如下:
self.navigationItem.leftBarButtonItem = cancelItem;
}
// 注意不要将注册通知的代码写在if (isNew) {}中
NSNotificationCenter *defaultCenter =
[NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(updateFonts)
name:UIContentSizeCategoryDidChangeNotification
object:nil];
}
return self;
}
- (void)dealloc
{
NSNotificationCenter *defaultCenter =
[NSNotificationCenter defaultCenter];
[defaultCenter removeObserver:self];
}
注意,用于响应UIContentSizeCategoryDidChangeNotification的方法是之前实现的updateFonts,viewWillAppear:中也会调用该方法。再次构建并运行应用,首先在设置应用中修改首选字体大小,然后返回应用,这次所有文本控件都会根据用户首选字体调整文字大小。
因为现在文本控件的文字大小会动态变化,所以下一节将调整文本控件的约束,支持动态字体。