自动填写Web服务呼叫响应上的文本

时间:2012-10-31 07:28:02

标签: ios web-services asynchronous-wcf-call sendasynchronousrequest

我是ios编程的新手,需要实现类似Google搜索框的内容,即自动填充文本字段。 我的方案如下 1.当用户输入文本字段时 2.background调用webservice获取数据(请求数据=文本字段数据)。

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

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

1 个答案:

答案 0 :(得分:4)

我会假设你正在谈论一个宁静的网络服务,而不是肥皂,为了上帝之爱!

是的,当然有可能。您可以按照这种方法,我可以使用HTTP库(例如AFNetworking)来发出请求,但为了简单起见,我只是在背景上使用URL的内容初始化NSData并在主服务器上更新UI线程使用GCD

  1. 将您的UITextField委托设置为您正在处理的viewDidLoad:方法

    的ViewController
    textField.delegate = self;
    
  2. 使用以下内容覆盖UITextField委托方法textField:shouldChangeCharactersInRange: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
    }
    
  3. 正如您所看到的,您需要习惯以下概念列表:

    • JSON解析(我可以解析XML,但为什么?!JSON更好!)
    • HTTP请求(您可以使用AFNetworking而不是我上面所做的)
    • 异步HTTP请求(不阻止主线程)
    • GCD(dispatch_async东西)
    • 代表(在本案例中为UITextField)

    效果更新

    • 当检查大小是否大于3个字符时,你甚至可以每2/3个字符只发出一次HTTP请求,比方说,只要length % 3请求。

    我建议你阅读一些关于那些

    的内容