7

나는 프로그래밍에 익숙하지 않으므로, Google 검색 상자, 즉 자동 완성 텍스트 필드와 같은 것을 구현해야합니다. 내 시나리오는 다음과 같습니다 1. 텍스트 입력란에 사용자 유형을 입력하십시오. 2. 데이터에 대한 웹 서비스 호출 (요청 데이터 = 텍스트 필드 데이터).웹 서비스 호출 응답에 텍스트 자동 입력

예 : - 웹 서비스 호출에 대한 텍스트 필드 요청 데이터의 사용자 유형이 "abc"인 경우 "abc"이어야하고 웹 서비스가 그에 대한 응답을 제공해야합니다. 다음에 사용자 유형 "d", 즉 텍스트 필드에 "abcd"가 포함 된 서비스 응답은 첨부 된 텍스트를 고려해야합니다. (google 검색 필드과 같은 것임) 3. 웹 서비스 호출은 비동기 적이어야합니다. 4. 응답이 드롭 다운 목록에 표시되어야합니다.

ios에서 가능합니까 ??? 자습서 또는 예제가 좋을 것입니다. 미리 감사드립니다.

답변

4

나는 신의 사랑을 위해 당신이 편안한 웹 서비스와 SOAP에 대해 이야기한다고 가정 할 것입니다!

물론 가능합니다.입니다. 당신은이 접근법을 따를 수 있습니다. 요청을하기 위해 AFNetworking과 같은 HTTP 라이브러리를 사용할 수 있지만 단순함을 위해 백그라운드의 URL 내용과 함께 NSData를 초기화하고 GCD을 사용하여 메인 스레드에서 UI를 업데이트하고 있습니다.

- (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 
} 

당신이 볼 수 있듯이 :

  1. viewDidLoad: 방법

    textField.delegate = self; 
    
  2. 오버라이드 UITextField 대리자 메서드 textField:shouldChangeCharactersInRange:replacementString:와 작업중인의 ViewController에 UITextField에 대리자를 설정 네가 가지고있는 개념들의 목록이있다. 익숙해 지려면 다음과 같이하십시오 :

    • JSON 구문 분석 (필자는 XML을 구문 분석 할 수 있었지만 그 이유는 무엇입니까?) JSON은 더 나은 방법입니다!)
    • HTTP 요청은 (대신 내가) 위의
    • 비동기 HTTP 요청을 (주 스레드를 차단하지 않음)
    • GCD합니다 (dispatch_async 물건)
    • 를 무슨 짓을했는지의 AFNetworking을 사용할 수 있습니다 대표 성능 업데이트

    (UITextField에 대한이 경우)

    • 크기가 3 문자보다 큰지 확인하는 경우 2/3 자마다 HTTP 요청 만 수행 할 수도 있습니다. 예를 들어 length % 3 인 경우에만 요청하십시오.

    난 당신이

+0

카를로스가 답장을 보내 주셔서 감사합니다 사람들에 대해 뭔가를 읽으십시오. 나는 그것을 확인하고 알려줄거야. – Raj