测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
Released上次发布 | 2014年12月 |
由Tom König维护。
依赖关系 | |
TOMSCoreDataManager | >= 0 |
TOMSMorphingLabel | >= 0 |
一个呈现建议的键盘辅助工具。建议以变形标签的形式显示,并通过自定义数据库获取。
这个项目的核心方法是通过自定义数据制作一个类似苹果键盘建议栏的控件(如在iOS 8的发布中看到的那样)。
platform :ios, '7.0'
pod "TOMSSuggestionBar", "~> 0.1.2"
简单实例化TOMSSuggestionBar并将textField订阅到建议上。以下suggestionBar将建议Person
类型的实例的name
值,这些实例是在Model.xcdatamodeld
中定义的。
TOMSSuggestionBar *suggestionBar = [[TOMSSuggestionBar alloc] init];
[suggestionBar subscribeTextInputView:self.textField
toSuggestionsForAttributeNamed:@"name"
ofEntityNamed:@"Person"
inModelNamed:@"Model"];
我们可以轻松修改建议栏的外观。
/**
Instantiate a suggestionBar with an alternative number of suggestionFields.
*/
TOMSSuggestionBar *suggestionBar = [[TOMSSuggestionBar alloc] initWithNumberOfSuggestionFields:5];
/**
Easily customize the bars colors and font.
*/
suggestionBar.backgroundColor = [UIColor redColor];
suggestionBar.tileColor = [UIColor greenColor];
suggestionBar.textColor = [UIColor blueColor];
suggestionBar.font = [UIFont systemFontOfSize:18];
您可以选择实现TOMSSuggestionDelegate
或TOMSSuggestionDataSource
并将其注册为建议栏的delegate
或dataSource
。
/**
Gets called when a suggestion tile is tapped.
@param suggestionBar The suggestionBar containing the tapped tile.
@param suggestion The text on the tapped tile.
@param associatedObject The instance fetched from CoreData that is represented by the tapped text.
*/
- (void)suggestionBar:(TOMSSuggestionBar *)suggestionBar
didSelectSuggestion:(NSString *)suggestion
associatedObject:(NSManagedObject *)associatedObject;
/**
Returns a `NSString` that is a substring of the overall textInput. It represents the substring that is relevant for fetching instances from CoreData for suggestions.
@param suggestionBar The suggestionBar that is displaying the contents.
@param textInput The whole text within the suggestionBars subscribed textInput.
@param caretLocation The location of the caret.
*/
- (NSString *)suggestionBar:(TOMSSuggestionBar *)suggestionBar
relevantContextForInput:(NSString *)textInput
caretLocation:(NSInteger)caretLocation;
/**
Returns a `NSPredicate` to define a fetch request for a specific context.
@param suggestionBar The suggestionBar that is displaying the contents.
@param context The currently relevant textsnipped that should be used in the predicate.
@param attributeName The name of the attribute that values are displayed of.
*/
- (NSPredicate *)suggestionBar:(TOMSSuggestionBar *)suggestionBar
predicateForContext:(NSString *)context
attributeName:(NSString *)attributeName;
/**
Returns a `NSArray` of `NSSortDescriptor` to specify the order in which fetched instances are displayed.
@param suggestionBar The suggestionBar that is displaying the contents.
@param attributeName The name of the attribute that values are displayed of.
*/
- (NSArray *)suggestionBar:(TOMSSuggestionBar *)suggestionBar
sortDescriptorsForAttributeName:(NSString *)attributeName;
以下是Delegate和DataSource的一个示例实现。
以下委托的示例简单地替换了文本字段中的最后一个单词为触摸的建议。
以下数据源的示例与默认配置类似。它将输入文本的最后一个单词作为相关上下文返回。获取属性值的谓词实现为模糊匹配。
- (void)viewDidLoad
{
[super viewDidLoad];
TOMSSuggestionBar *suggestionBar = [[TOMSSuggestionBar alloc] init];
[suggestionBar subscribeTextInputView:self.textField
toSuggestionsForAttributeNamed:@"name"
ofEntityNamed:@"Person"
inModelNamed:@"Model"];
suggestionBar.delegate = self;
suggestionBar.dataSource = self;
}
#pragma mark - TOMSSuggestionDelegate
- (void)suggestionBar:(TOMSSuggestionBar *)suggestionBar
didSelectSuggestion:(NSString *)suggestion
associatedObject:(NSManagedObject *)associatedObject
{
NSString *replacement = [suggestion stringByAppendingString:@" "];
self.textField.text = [self.textField.text stringByReplacingCharactersInRange:[suggestionBar rangeOfRelevantContext]
withString:replacement];
}
#pragma mark - TOMSSuggestionDataSource
- (NSString *)suggestionBar:(TOMSSuggestionBar *)suggestionBar
relevantContextForInput:(NSString *)textInput
caretLocation:(NSInteger)caretLocation
{
NSRange lastWordRange = [textInput rangeOfString:@" "
options:NSBackwardsSearch];
NSString *relevantContext;
if (lastWordRange.location == NSNotFound) {
relevantContext = textInput;
} else {
relevantContext = [textInput substringFromIndex:lastWordRange.location + 1];
}
return relevantContext;
}
- (NSPredicate *)suggestionBar:(TOMSSuggestionBar *)suggestionBar
predicateForContext:(NSString *)context
attributeName:(NSString *)attributeName
{
return [NSPredicate predicateWithFormat:@"%K LIKE[cd] %@", attributeName, [NSString stringWithFormat:@"*%@*", context]];
}
- (NSArray *)suggestionBar:(TOMSSuggestionBar *)suggestionBar sortDescriptorsForAttributeName:(NSString *)attributeName
{
return @[[NSSortDescriptor sortDescriptorWithKey:attributeName ascending:YES]];
}
TOMSSuggestionBar在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。