MLPAutoCompleteTextField 建议 table 交互问题
MLPAutoCompleteTextField suggestion table interaction issue
目前我正在我的项目中使用这个第三方库https://github.com/EddyBorja/MLPAutoCompleteTextField。该库用于根据用户输入显示建议列表。
我确实像这样设置了文本字段
self.searchTextField = [[MLPAutoCompleteTextField alloc] initWithFrame:CGRectMake(0, 0, 250, 30)];
[self.searchTextField setBorderStyle:UITextBorderStyleRoundedRect];
self.searchTextField.backgroundColor = [UIColor whiteColor];
self.searchTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
self.searchTextField.textColor = [UIColor blackColor];
self.searchTextField.returnKeyType = UIReturnKeyDone;
self.searchTextField.placeholder = @"Enter name to search";
self.searchTextField.autocorrectionType = UITextAutocorrectionTypeNo;
self.searchTextField.delegate = self;
self.searchTextField.autoCompleteDelegate = self;
self.searchTextField.autoCompleteDataSource = self;
如下实现数据源协议
- (NSArray *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField possibleCompletionsForString:(NSString *)string {
return @[@"AAA", @"BBB", @"CCC", @"DDD"];
当我在文本字段中输入内容时,显示了下拉列表,但是当我点击下拉列表中的单元格时,列表消失了,没有完成文本字段中的任何单词。
任何遇到过这个问题的人请向我解释我哪里错了。提前致谢。
我前一段时间遇到了同样的问题。我碰巧在 UITableView 中使用 MLPAutocomleteTextField,因此所有触摸事件都可能被 tableview 拦截。
我解决了这个问题,方法是将我的 MLPAutocomleteTextField 实例的 autoCompleteTableAppearsAsKeyboardAccessory 设置为 TRUE 以启用自动完成作为键盘附件。这让我可以 select 我的自动完成选项。希望这也能解决您的问题。 :)
我通过子类化我的 UITableViewCell 解决了这个问题,有点棘手,但它对我有用:
#import "AutoCompleteTableViewCell.h"
@interface AutoCompleteTableViewCell()
@property (nonatomic, assign) BOOL selectedCell;
@end
@implementation AutoCompleteTableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
self.selectedCell = NO;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView* hitView = [super hitTest:point withEvent:event];
if (hitView != nil)
{
[self.superview bringSubviewToFront:self];
}
return hitView;
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
CGRect rect = self.bounds;
BOOL isInside = CGRectContainsPoint(rect, point);
if(!isInside)
{
for (UIView *view in self.subviews)
{
isInside = CGRectContainsPoint(view.frame, point);
if(isInside)
break;
}
}
if (!self.selectedCell) {
self.selectedCell = YES;
id view = [self superview];
while (view && [view isKindOfClass:[UITableView class]] == NO) {
view = [view superview];
}
UITableView *tableView = (UITableView *)view;
NSIndexPath *indexPath = [tableView indexPathForCell:self];
[tableView.delegate tableView:tableView didSelectRowAtIndexPath:indexPath];
}
return isInside;
}
然后调用委托方法:
- (void)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
didSelectAutoCompleteString:(NSString *)selectedString
withAutoCompleteObject:(id<MLPAutoCompletionObject>)selectedObject
forRowAtIndexPath:(NSIndexPath *)indexPath;
目前我正在我的项目中使用这个第三方库https://github.com/EddyBorja/MLPAutoCompleteTextField。该库用于根据用户输入显示建议列表。
我确实像这样设置了文本字段
self.searchTextField = [[MLPAutoCompleteTextField alloc] initWithFrame:CGRectMake(0, 0, 250, 30)];
[self.searchTextField setBorderStyle:UITextBorderStyleRoundedRect];
self.searchTextField.backgroundColor = [UIColor whiteColor];
self.searchTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
self.searchTextField.textColor = [UIColor blackColor];
self.searchTextField.returnKeyType = UIReturnKeyDone;
self.searchTextField.placeholder = @"Enter name to search";
self.searchTextField.autocorrectionType = UITextAutocorrectionTypeNo;
self.searchTextField.delegate = self;
self.searchTextField.autoCompleteDelegate = self;
self.searchTextField.autoCompleteDataSource = self;
如下实现数据源协议
- (NSArray *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField possibleCompletionsForString:(NSString *)string {
return @[@"AAA", @"BBB", @"CCC", @"DDD"];
当我在文本字段中输入内容时,显示了下拉列表,但是当我点击下拉列表中的单元格时,列表消失了,没有完成文本字段中的任何单词。
任何遇到过这个问题的人请向我解释我哪里错了。提前致谢。
我前一段时间遇到了同样的问题。我碰巧在 UITableView 中使用 MLPAutocomleteTextField,因此所有触摸事件都可能被 tableview 拦截。
我解决了这个问题,方法是将我的 MLPAutocomleteTextField 实例的 autoCompleteTableAppearsAsKeyboardAccessory 设置为 TRUE 以启用自动完成作为键盘附件。这让我可以 select 我的自动完成选项。希望这也能解决您的问题。 :)
我通过子类化我的 UITableViewCell 解决了这个问题,有点棘手,但它对我有用:
#import "AutoCompleteTableViewCell.h"
@interface AutoCompleteTableViewCell()
@property (nonatomic, assign) BOOL selectedCell;
@end
@implementation AutoCompleteTableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
self.selectedCell = NO;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView* hitView = [super hitTest:point withEvent:event];
if (hitView != nil)
{
[self.superview bringSubviewToFront:self];
}
return hitView;
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
CGRect rect = self.bounds;
BOOL isInside = CGRectContainsPoint(rect, point);
if(!isInside)
{
for (UIView *view in self.subviews)
{
isInside = CGRectContainsPoint(view.frame, point);
if(isInside)
break;
}
}
if (!self.selectedCell) {
self.selectedCell = YES;
id view = [self superview];
while (view && [view isKindOfClass:[UITableView class]] == NO) {
view = [view superview];
}
UITableView *tableView = (UITableView *)view;
NSIndexPath *indexPath = [tableView indexPathForCell:self];
[tableView.delegate tableView:tableView didSelectRowAtIndexPath:indexPath];
}
return isInside;
}
然后调用委托方法:
- (void)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
didSelectAutoCompleteString:(NSString *)selectedString
withAutoCompleteObject:(id<MLPAutoCompletionObject>)selectedObject
forRowAtIndexPath:(NSIndexPath *)indexPath;