文本字段为空时隐藏自动完成表格视图

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 您仍然面临任何问题或此代码有效

以上是关于文本字段为空时隐藏自动完成表格视图的主要内容,如果未能解决你的问题,请参考以下文章

IOS中带有静态数组数据的自动完成文本字段

当文本字段为空时禁用警报按钮 Swift 3

Jquery ui自动完成填充带有ID​​的隐藏字段

从文本字段捕获数据时如何忽略自动完成值?

使用带有联系人电话号码的自动完成文本视图

高级自动完成 Swift