簡體   English   中英

自動填寫Web服務呼叫響應上的文本

[英]Auto fill text on web service call response

我是ios編程的新手,需要實現類似谷歌搜索框的東西,即自動填充文本字段。 我的場景如下1.當用戶在文本字段中鍵入時2.background調用webservice獲取數據( 請求數據=文本字段數據 )。

例如: - 如果用戶在Web服務調用的文本字段請求數據中鍵入“abc”應為“abc”,並且Web服務對此進行響應。 現在下次用戶輸入“d”即textfield包含“abcd”服務響應時必須考慮附加文本。( 類似谷歌搜索字段 )3.web服務調用應該是異步的。 4.response應顯示在下拉列表中。

有可能在ios ??? 任何教程或示例將不勝感激。 提前致謝。

我會假設你正在談論一個寧靜的網絡服務,而不是肥皂,為了上帝的愛!

是的,當然有可能 您可以按照這種方法,我可以使用AF libneting等HTTP庫來發出請求,但為了簡單起見,我只是使用背景上的URL內容初始化NSData並使用GCD更新主線程上的UI。

  1. 將您的UITextField委托設置為您正在使用viewDidLoad:方法的ViewController

     textField.delegate = self; 
  2. 覆蓋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

我建議你讀一些關於那些的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM