7

Tôi mới sử dụng chương trình ios, cần triển khai một cái gì đó giống như hộp tìm kiếm của google tức là trường văn bản tự động điền. Kịch bản của tôi như sau 1.khi người dùng nhập vào trường văn bản 2.quay lại cuộc gọi tới dịch vụ web cho dữ liệu (yêu cầu dữ liệu = dữ liệu trường văn bản). Ví dụ:Tự động điền văn bản trên phản hồi cuộc gọi dịch vụ web

ví dụ: - nếu loại người dùng "abc" trong dữ liệu yêu cầu trường văn bản cho cuộc gọi dịch vụ web phải là "abc" và dịch vụ web cung cấp phản hồi về điều đó. Giờ đây, kiểu người dùng tiếp theo "d" tức là trường văn bản chứa phản hồi dịch vụ "abcd" phải xem xét văn bản được nối thêm. (một số nội dung như trường tìm kiếm google) 3. Cuộc gọi dịch vụ web phải không đồng bộ. 4.response sẽ được hiển thị trong danh sách thả xuống.

Có thể trong ios ??? Bất kỳ hướng dẫn hoặc ví dụ nào sẽ được đánh giá cao. Cảm ơn trước.

Trả lời

4

Tôi sẽ giả sử bạn đang nói về một Webservice Restful và NOT SOAP, vì tình yêu của thần!

Có, tất nhiên có thể là. Bạn có thể làm theo cách tiếp cận này, tôi có thể sử dụng một HTTP lib chẳng hạn như AFNetworking để thực hiện yêu cầu nhưng vì mục đích đơn giản, tôi chỉ cần khởi tạo NSData với nội dung của URL trên nền và cập nhật giao diện người dùng trên luồng chính bằng cách sử dụng GCD.

  1. Đặt đại biểu UITextField của bạn vào ViewController bạn đang làm việc trên viewDidLoad: phương pháp

    textField.delegate = self; 
    
  2. override phương pháp UITextField đại biểu textField:shouldChangeCharactersInRange:replacementString: với:

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

Như bạn có thể nhìn thấy có một danh sách các khái niệm mà bạn ne ed để quen với:

  • Phân tích cú pháp JSON (Tôi có thể phân tích cú pháp XML, nhưng tại sao ?! JSON là cách tốt hơn!)
  • HTTP Request (bạn có thể sử dụng AFNetworking thay vì những gì tôi đã làm ở trên)
  • yêu cầu HTTP không đồng bộ (không chặn thread chính)
  • GCD (những thứ dispatch_async)
  • các đại biểu (trong trường hợp này cho UITextField)

cập nhật Performance

  • khi kiểm tra nếu kích thước lớn hơn 3 ký tự, bạn thậm chí có thể chỉ yêu cầu HTTP mỗi 2/3 ký tự, giả sử, chỉ yêu cầu nếu length % 3.

Tôi khuyên bạn nên đọc điều gì đó về những người

+0

Carlos cảm ơn bạn đã trả lời. Tôi sẽ kiểm tra và cho bạn biết – Raj

Các vấn đề liên quan