如何在没有UITableview的情况下在UISearchbar中实现自动完成?

时间:2016-05-24 11:39:04

标签: ios objective-c

在不使用UITableview的情况下,需要在我的iPhone中输出这样的图像。任何人都可以帮助我。

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,您需要拥有一个NSArray,其中包含您要提供的所有数据作为用户的潜在选项。这里我使用的是pastURL的NSMutableArray,每次用户浏览一个URL时,我们都会将它添加到数组中。 接下来,您需要创建一个视图以显示用户可以从中选择的URL。这样做的一个好方法是在输入字段下创建一个列表视图,列出所有可能的选项。此表视图只有在用户在文本字段中键入数据时才会出现,并且可以在其余时间隐藏。

autocompleteTableView = [[UITableView alloc] initWithFrame:
    CGRectMake(0, 80, 320, 120) style:UITableViewStylePlain];
autocompleteTableView.delegate = self;
autocompleteTableView.dataSource = self;
autocompleteTableView.scrollEnabled = YES;
autocompleteTableView.hidden = YES;  
[self.view addSubview:autocompleteTableView];

使用UITextFieldDelegate并实施shouldChangeCharactersInRange协议。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(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 {

  // Put anything that starts with this substring into the autocompleteUrls array
  // The items in this array is what will show up in the table view
  [autocompleteUrls removeAllObjects];
  for(NSString *curString in pastUrls) {
    NSRange substringRange = [curString rangeOfString:substring];
    if (substringRange.location == 0) {
      [autocompleteUrls addObject:curString];  
    }
  }
  [autocompleteTableView reloadData];
}

有关详情,请查看:Tutorial

或下载演示应用:Demo App