是什么
TRTabView
是一个标签视图,类似于在 iPad 的 Mobile Safari 中看到的,它使用了来自 UITableView
的熟悉的代理/数据源设计模式。
概述
TRTabView
使用一个受 UITableView
代理和数据源方法启发的代理设计模式。
标签重排、溢出行为、标签的最小/最大数量、标签的最小/最大宽度等等都可以通过实现相应的代理调用轻松配置。
对于大多数设置,都已经提供了一个合理的默认值。
支持直接显示方向更改。
请参见https://github.com/mkeiser/TRTabView 中的示例项目。
视图配置
实际的 TRTabView
只包含标签的区域。它可以自由地添加到任何父视图。它不管理每个标签要显示的实际内容。所以标签被选择时所发生的事情完全取决于您。
该项目包含 TRTabViewToolbar
类(一个 UIToolbar
的子类),它应该放置在标签视图之上以形成其顶部区域(标签的“根”)。然而,除了绘制与标签栏相匹配的背景外,它没有任何特殊功能。也可以使用 UINavigationBar
子类或自定义视图。
如何使用
创建一个 TRTabView
并为其分配符合 TRTabViewDelegate
协议的委托。
一个最小的委托实现如下所示
/* Assume "self.model" holds an array of strings that represent the tab titles. */
- (NSUInteger)numberOfTabsInTabView:(TRTabView *)tabView {
return [self.model count];
}
- (TRTab *)tabView:(TRTabView *)tabView tabForIndex:(NSUInteger)index {
TRTab *tab = [tabView dequeueDefaultTabForIndex:index]; // Use default tab views
tab.titleLabel.text = [self.model objectAtIndex:index];
return tab;
}
/* Return the title to use in the overflow popover. */
- (NSString *)overflowTitleForIndex:(NSUInteger)index {
return [self.model objectAtIndex:index];
}
- (void)tabView:(TRTabView *)tabView didSelectTabAtIndex:(NSUInteger)index {
id modelObject = self.model[index];
/* Display content view for model object */
}
当显示添加按钮(tabView.showAddButton = YES
)时,您应该实现一个处理标签添加的方法
- (void)tabViewCommitTabAddition:(TRTabView *)tabView {
id modelObject = new model object...
NSUInteger index = new model object index...
[self.model insertObject:modelObject atIndex:index];
[tabView addTabAtIndex:index animated:YES];
}
如果您启用了标签删除(tabView.deleteButtonMode != TRTabViewButtonModeNever
),则需要处理标签删除
- (void)tabView:(TRTabView *)tabView commitTabDeletionAtIndex:(NSUInteger)index {
[self.model removeObjectAtIndex:index];
[self.tabView deleteTabAtIndex:index animated:YES];
}
TRTabView
非常灵活,提供了许多定制其行为的方式。请检查头文件以获取更多方法和属性。
许可
MIT
联系