Ios web服务调用响应上的自动填充文本

Ios web服务调用响应上的自动填充文本,ios,web-services,asynchronous-wcf-call,sendasynchronousrequest,Ios,Web Services,Asynchronous Wcf Call,Sendasynchronousrequest,我是ios编程新手,需要实现类似谷歌搜索框的功能,即自动填充文本字段。 我的设想如下 1.当用户在文本字段中键入时 2.后台调用webservice获取数据(请求数据=文本字段数据) 例如:-如果用户在文本字段中键入“abc”,则web服务调用的请求数据应为“abc”,并且web服务对此作出响应。下一次用户类型“D”,即文本字段包含“ABCD”服务响应时,必须考虑附加文本。(类似谷歌搜索字段< /强>) 3.web服务调用应该是异步的。 4.响应应显示在下拉列表中 在ios中可能吗??? 任何教

我是ios编程新手,需要实现类似谷歌搜索框的功能,即自动填充文本字段。 我的设想如下 1.当用户在文本字段中键入时 2.后台调用webservice获取数据(请求数据=文本字段数据

例如:-如果用户在文本字段中键入“abc”,则web服务调用的请求数据应为“abc”,并且web服务对此作出响应。下一次用户类型“D”,即文本字段包含“ABCD”服务响应时,必须考虑附加文本。(<强>类似谷歌搜索字段< /强>) 3.web服务调用应该是异步的。 4.响应应显示在下拉列表中

在ios中可能吗??? 任何教程或示例都将不胜感激。
提前谢谢。

看在上帝的份上,我想你说的是一个宁静的Web服务,而不是SOAP

是的,当然有可能。您可以采用这种方法,我可以使用HTTP库(如)发出请求,但为了简单起见,我只是在后台使用URL的内容初始化NSData,并在主线程上使用更新UI

  • 将UITextField委托设置为正在使用的ViewController
    viewDidLoad:
    方法

    textField.delegate = self;
    
  • UITextField
    委托方法
    textField:shouldChangeCharactersRange:replacementString:
    重写为:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
        // To increase performance I advise you to only make the http request on a string bigger than 3,4 chars, and only invoke it
        if( textField.text.length + string.length - range.length > 3) // lets say 3 chars mininum
        {
            // call an asynchronous HTTP request
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
                NSURL * url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http:/example.com/search?q=%@", textField.text]];
                NSData * results = [NSData dataWithContentsOfURL:url];
                NSArray * parsedResults = [NSJSONSerialization JSONObjectWithData: results options: NSJSONReadingMutableContainers error: nil];
               // TODO: with this NSData, you can parse your values - XML/JSON
               dispatch_sync(dispatch_get_main_queue(), ^{
                   // TODO: And update your UI on the main thread
                   // let's say you update an array with the results and reload your UITableView
                   self.resultsArrayForTable = parsedResults;
                   [tableView reloadData];
               });
            });
    
        }
    
        return YES; // this is the default return, means "Yes, you can append that char that you are writing
        // you can limit the field size here by returning NO when a limit is reached
    }
    
  • 如您所见,有一系列您需要习惯的概念:

    • JSON解析(我可以解析XML,但为什么?!JSON更好!)
    • HTTP请求(您可以使用AFNetworking,而不是我上面所做的)
    • 异步HTTP请求(不阻止主线程)
    • GCD(异步调度的
      dispatch\u
      stuff)
    • 委托(在本例中为UITextField)
    性能更新

    • 当检查大小是否大于3个字符时,您甚至只能每隔2/3个字符发出HTTP请求,比如说,仅在
      长度%3
      时请求

    我建议你读一些关于这些的东西,卡洛斯谢谢你的回复。我会检查一下,然后告诉你