在Web服务呼叫响应中自动填写文本

我是ios编程新手,需要实现类似谷歌搜索框即自动填充文本字段。 当用户输入文本字段时,我的场景如下1.背景调用web服务以获取数据( 请求数据=文本字段数据 )。

例如: - 如果用户在Web服务调用的文本字段请求数据中键入“abc”应该是“abc”,并且Web服务会对此提供响应。 现在下一次用户输入“d”即textfield中包含“abcd”的服务响应必须考虑附加文本( 类似谷歌搜索域 )3.web服务调用应该是异步的。 4.反应应显示在下拉列表中。

是否有可能在IOS? 任何教程或例子,将不胜感激。 提前致谢。


我会假设你正在谈论一个Restful web服务而不是SOAP,因为上帝的爱!

是的,当然这是可能的 。 你可以遵循这种方法,我可以使用一个HTTP的lib如AFNetworking来提出请求,但为了简单起见,我只是用背景上的URL内容启动NSData,并使用GCD更新主线程上的UI。

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

    textField.delegate = self;
    
  • 覆盖UITextField委托方法textField:shouldChangeCharactersInRange:replacementString: with:

    - (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_async东西)
  • 代表(在本例中为UITextField)
  • 性能更新

  • 当检查大小是否大于3个字符时,您甚至可以每2/3个字符只发出HTTP请求,比方说,只有在length % 3才会请求。
  • 我建议你读些关于这些的东西

    链接地址: http://www.djcxy.com/p/65489.html

    上一篇: Auto fill text on web service call response

    下一篇: 32bit Build in Visual Studio 2012