iOS - MJNIndexView
MJNIndexView 是一个高度可定制的 UIControl,用于显示 UITableView 的替代索引。我想要模仿 Jeremey Olson 为他们的 Languages 应用设计的 Tapity 索引。我认为他们的索引实现想法非常出色,这是优秀 UX 的最佳示例之一。我希望更多应用都将使用类似的索引而不是通用的索引。
YouTube 视频
示例代码
@interface MJNIndexTestViewController () <MJNIndexViewDataSource>
@property (nonatomic, strong) MJNIndexView *indexView;
@property (nonatomic, strong) NSMutableArray *sectionArray;
@property (nonatomic, strong) UITableView *tableView;
@end
@implementation MJNIndexTestViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// initialise tableView
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds] [self.tableView registerClass:[UITableViewCell
class]forCellReuseIdentifier:@"cell"];
self.tableView.dataSource = self;
self.tableView.delegate = self;
self.tableView.showsVerticalScrollIndicator = NO;
[self.view addSubview:self.tableView];
// initialise MJNIndexView
self.indexView = [[MJNIndexView alloc]initWithFrame:self.view.bounds];
self.indexView.dataSource = self;
self.indexView.fontColor = [UIColor blueColor];
[self.view addSubview:self.indexView];
}
// two methods needed for MJNINdexView protocol
- (NSArray *)sectionIndexTitlesForMJNIndexView:(MJNIndexView *)indexView
{
return sectionArray;
}
- (void)sectionForSectionMJNIndexTitle:(NSString *)title atIndex:(NSInteger)index;
{
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:index] atScrollPosition: UITableViewScrollPositionTop animated:NO];
}
.
.
.
@end
用法
使用 MJNIndexView 仅需两个文件: MJNindexView.h
和 MJNIndexView.m
。将它们都复制到您的 Xcode 项目中。请确保在您的目标中包含 QuartzCore 框架。
您的UIViewController必须实现MJNIndexViewDataSource协议方法。其中第一个方法需要提供所有节标题的索引。第二个方法需要提供一个由用户选择的标题或索引编号。
您可以通过调整20多个参数来自定义MJNIndex的外观和行为。您可以在演示应用中尝试其中大部分参数。
如果您想在将MJNIndexView添加到父视图之后更改索引项或者大多数参数,应使用方法– (void)refreshIndexItems
重新计算每个项的位置、大小等。
待办事项
• 优化窗帘淡出效果(当使用非常大的右侧边距值时,其行为可能不正常)。
• 提升老旧设备上的性能
• Cocoapod
致谢
如果您在您的应用中使用了这个控件,请添加一些致谢。
许可证
MIT许可证
版权所有(c)2013 Mateusz Nuckowski (http://mateusz.nuckowski.com)
任何人未经许可从软件及其相关文档文件(“软件”)获取副本的,均可免费在此软件中处理,包括但不限于使用、复制、修改、合并、发布、分发、再许可、出售软件副本的权力,并允许拥有软件的人进行此类操作,前提是满足以下条件
上述版权声明和许可声明应包含在软件的所有副本或实质性部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、针对特定目的的适用性和非侵犯性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负任何责任,不论是在合同、侵权或其他案件,无论是源于、源于或与软件或其使用或其他交易相关。