文本字段为空时隐藏自动完成表格视图
Posted
技术标签:
【中文标题】文本字段为空时隐藏自动完成表格视图【英文标题】:Hide the autocomplete Tableview when text field is empty 【发布时间】:2018-03-16 07:06:35 【问题描述】:以下代码将在我的文本字段txtActivity
下方生成自定义自动完成表格视图autocompleteTableView
。文本字段为空时如何隐藏表格视图。
- (void)viewDidLoad
[super viewDidLoad];
self.txtActivity.delegate = self;
[self cofigureAutoComTableView];
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString *)string
autocompleteTableView.hidden = NO;
NSString *substring = [NSString stringWithString:textField.text];
substring = [substring stringByReplacingCharactersInRange:range withString:string];
[self searchAutocompleteEntriesWithSubstring:substring];
return YES;
- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
autocompleteMArray = [[NSMutableArray alloc] init];
[autocompleteMArray removeAllObjects];
for(NSString *curString in sCategory) //**** sCategory is a mutable array generated in another method not shown ****
NSRange substringRange = [curString rangeOfString:substring];
if (substringRange.length > 0)
[autocompleteMArray addObject:curString];
NSLog(@"*******The autocompleteMArray : %@ ", autocompleteMArray);
[autocompleteTableView reloadData];
-(void)cofigureAutoComTableView
autocompleteTableView = [[UITableView alloc] initWithFrame:CGRectMake(self.txtActivity.frame.origin.x-10,self.txtActivity.frame.origin.y+32,self.txtActivity.frame.size.width, 120) style:UITableViewStylePlain];
autocompleteTableView.delegate = self;
autocompleteTableView.dataSource = self; //**** Setting this to self, is it correct???
autocompleteTableView.scrollEnabled = YES;
autocompleteTableView.hidden = YES;
[self.view addSubview:autocompleteTableView];
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return autocompleteMArray.count;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellIdentifier = @"cellIdentifier";
UITableViewCell *cell = [self.autocompleteTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.textLabel.text = [autocompleteMArray objectAtIndex:indexPath.row];
return cell;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath (NSIndexPath *)indexPath;
//**** NOT DETECTING *******
NSLog(@"Selected Cell %@", [autocompleteMArray objectAtIndex:indexPath.row]);
【问题讨论】:
阅读我的评论并尝试它肯定会适用于您的情况 【参考方案1】:如果 substringRange
长度为 0,则将 sCategory
数组分配给 autocompleteMArray
并重新加载 tableview。
- (void)searchAutocompleteEntriesWithSubstring:(NSString *)substring
autocompleteMArray = [[NSMutableArray alloc] init];
[autocompleteMArray removeAllObjects];
if ([substring length] == 0)
for(NSString *curString in sCategory)
//**** sCategory is a mutable array generated in another method not shown ****
NSRange substringRange = [curString rangeOfString:substring];
if (substringRange.length > 0)
[autocompleteMArray addObject:curString];
else
autocompleteMArray = sCategory;
NSLog(@"*******The autocompleteMArray : %@ ", autocompleteMArray);
[autocompleteTableView reloadData];
【讨论】:
Rajesh,substringRange 是创建代码的后面部分,你如何在创建之前获取和使用它?【参考方案2】:- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
if([[NSString stringWithFormat:@"%@%@",textField.text,string] isEqualToString:@""])
autocompleteTableView.hidden = YES;
else
autocompleteTableView.hidden = range.location == 0 ? YES : NO;
NSString *substring = [NSString stringWithString:textField.text];
substring = [substring stringByReplacingCharactersInRange:range withString:string];
[self searchAutocompleteEntriesWithSubstring:substring];
return YES;
【讨论】:
嗨 Rohit,这有点工作,但唯一的事情是只有子字符串的第二个输入,然后才会出现自动完成表视图。我相信它是范围,因为当第一次输入子字符串时,范围从最后一个开始总是不为零?请帮忙。 我修改了我的答案,所以请再试一次,让我知道它是否正常工作。 @HansheungCheah 您仍然面临任何问题或此代码有效以上是关于文本字段为空时隐藏自动完成表格视图的主要内容,如果未能解决你的问题,请参考以下文章