iOS应用中字体收藏与根视图控制器开发指南
立即解锁
发布时间: 2025-08-24 01:21:17 阅读量: 1 订阅数: 8 

### iOS应用中字体收藏与根视图控制器开发指南
#### 1. 字体收藏列表类的创建
在应用中,我们希望让用户能够维护一个喜爱字体的列表,包括添加、查看和移除字体。为了统一管理这个列表,我们将创建一个新的类 `FavoritesList`。
##### 1.1 创建新类
步骤如下:
1. 在项目导航器中选择 `Fonts` 文件夹。
2. 按下 `⌘N` 调出新建文件助手。
3. 从 iOS 源部分选择 `Cocoa Touch Class`,然后点击 `Next`。
4. 在接下来的屏幕中,将新类命名为 `FavoritesList`,并在 `Subclass of` 字段中选择 `NSObject`。
创建完类文件后,打开 `FavoritesList.h` 并添加以下代码:
```objc
#import <Foundation/Foundation.h>
@interface FavoritesList : NSObject
+ (instancetype)sharedFavoritesList;
- (NSArray *)favorites;
- (void)addFavorite:(id)item;
- (void)removeFavorite:(id)item;
@end
```
这里,`sharedFavoritesList` 是一个工厂方法,用于返回该类的单例实例。`instancetype` 是 Objective - C 中较新的返回类型,推荐用于工厂方法和 `init` 方法,以提供类型安全。
##### 1.2 实现类方法
接下来,打开 `FavoritesList.m` 进行实现:
```objc
#import "FavoritesList.h"
@interface FavoritesList ()
@property (strong, nonatomic) NSMutableArray *favorites;
@end
@implementation FavoritesList
+ (instancetype)sharedFavoritesList {
static FavoritesList *shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[self alloc] init];
});
return shared;
}
- (instancetype)init {
self = [super init];
if (self) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *storedFavorites = [defaults objectForKey:@"favorites"];
if (storedFavorites) {
self.favorites = [storedFavorites mutableCopy];
} else {
self.favorites = [NSMutableArray array];
}
}
return self;
}
- (void)addFavorite:(id)item {
[_favorites insertObject:item atIndex:0];
[self saveFavorites];
}
- (void)removeFavorite:(id)item {
[_favorites removeObject:item];
[self saveFavorites];
}
- (void)saveFavorites {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.favorites forKey:@"favorites"];
[defaults synchronize];
}
@end
```
`sharedFavoritesList` 方法使用 `dispatch_once` 确保只创建一个实例。`init` 方法从用户偏好设置中加载收藏的字体,如果没有则创建一个空数组。`addFavorite` 和 `removeFavorite` 方法用于添加和移除收藏字体,并调用 `saveFavorites` 方法将更改保存到用户偏好设置中。
#### 2. 创建根视图控制器
现在我们开始创建第一个视图控制器,使用 `UIFont` 类获取字体族列表来填充表格行。
##### 2.1 创建新的视图控制器类
步骤如下:
1. 在项目导航器中选择 `ViewController.h` 和 `ViewController.m`,按下 `Delete` 键将它们删除并移到废纸篓。
2. 选择 `Fonts` 文件夹,按下 `⌘N` 调出新建文件助手。
3. 从 iOS 源部分选择 `Cocoa Touch Class`,然后点击 `Next`。
4. 将新类命名为 `RootViewController`,并在 `Subclass of` 字段中输入 `UITableViewController`。
5. 点击 `Next` 然后点击 `Create` 创建新类。
打开 `RootViewController.m` 并添加以下代码:
```objc
#import "RootViewController.h"
#import "FavoritesList.h"
@interface RootViewController ()
@property (copy, nonatomic) NSArray *familyNames;
@property (assign, nonatomic) CGFloat cellPointSize;
@property (strong, nonatomic) FavoritesList *favoritesList;
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.familyNames = [[UIFont familyNames]
sortedArrayUsingSelector:@selector(compare:)];
UIFont *preferredTableViewFont = [UIFont preferredFontForTextStyle:
UIFontTextStyleHeadline];
self.cellPointSize = preferredTableViewFont.pointSize;
self.favoritesList = [FavoritesList sharedFavoritesList];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
}
- (UIFont *)fontForDisplayAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
NSString *familyName = self.familyNames[indexPath.row];
NSString *fontName = [[UIFont fontNamesForFamilyName:familyName]
firstObject];
return [UIFont fontWithName:fontName size:self.cellPointSize];
} else {
return nil;
}
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if ([self.favoritesList.favorites count] > 0) {
return
```
0
0
复制全文
相关推荐










