खोज…


परिचय

ज़मरीन के साथ काम करना शुरू करने के बाद से ऐसी कई चीज़ें हुईं हैं जो मैं चाहता हूं कि किसी और ने पहले ही दस्तावेज़ कर लिया हो। यहां मैं समझाता हूं कि Google स्थानों के 1 पहलू का उपयोग कैसे करें स्वतः पूर्णता, परिणाम नियंत्रक का यूआई नियंत्रण बनाना। हालांकि यह कोड Googles पर आधारित है, स्विफ्ट से C # में परिवर्तित स्वयं के उदाहरणों पर मैंने पूरी कोशिश की है कि यह पूरी तरह से काम करने वाला उदाहरण है। मुझे उम्मीद है कि यह प्रलेखन दूसरों की मदद करेगा।

परिणाम नियंत्रक के साथ एक स्वत: पूर्ण UI नियंत्रण जोड़ें।

स्वत: पूर्ण UI नियंत्रण अंतर्निहित स्वत: पूर्ण कार्यक्षमता के साथ एक खोज संवाद है। जैसे ही उपयोगकर्ता खोज शब्दों में प्रवेश करता है, नियंत्रण चुनने के लिए अनुमानित स्थानों की सूची प्रस्तुत करता है। जब उपयोगकर्ता एक चयन करता है, तो एक GMSPlace (Xamarin में स्थान) उदाहरण वापस आ जाता है, जिसे आपका ऐप तब चयनित स्थान के बारे में विवरण प्राप्त करने के लिए उपयोग कर सकता है।

जैसा कि इस उदाहरण के ऊपर बताया गया है कि परिणाम नियंत्रक का उपयोग करता है जो पाठ इनपुट UI पर अधिक नियंत्रण के लिए अनुमति देता है। परिणाम नियंत्रक गतिशील रूप से इनपुट UI फ़ोकस के आधार पर परिणाम सूची की दृश्यता को टॉगल करेगा।

इस कोड का उद्देश्य नीचे की तरह एक स्क्रीन प्रदर्शित करना है:

यहाँ छवि विवरण दर्ज करें

जब आप टाइप करना शुरू करेंगे तो यह आपके पते को स्वत: पूर्ण कर देगा, जैसे नीचे की छवि:

यहाँ छवि विवरण दर्ज करें

निर्देश:

  1. पहले हमें अपने विज़ुअल स्टूडियो में गूगल मैप्स एपीआई को जोड़ने की जरूरत है, यह नुगेट के माध्यम से उपलब्ध है, बस Xamarin.Google.iOS.Maps के लिए खोज करें, इसे अपने iOS प्रोजेक्ट में जोड़ें, वैकल्पिक रूप से आप इसे Xamarin Xamarin X के मैप मैप iOS SDK से डाउनलोड कर सकते हैं

  2. हमें Google स्वतः पूर्ण दृश्य नियंत्रक को ट्रिगर करने के लिए बटन की तरह कुछ चाहिए। इस उदाहरण में मैं एक स्टोरी बोर्ड के साथ ऐसा करता हूं और GoogleButton नाम का एक बटन जोड़ा है, आप इसे कोड के साथ ट्रिगर कर सकते हैं यह वास्तव में कोई फर्क नहीं पड़ता।

  3. ViewDidLoad के तहत अपने दृश्य नियंत्रक वर्ग में निम्न कोड जोड़ें। नीचे दिए गए मेरे उदाहरण में मैं मोबाइल उपकरणों का उपयोग नहीं कर रहा हूं, मेरा अंतिम समाधान निश्चित रूप से ऐसा करेगा, लेकिन यह एक परीक्षण था और मैं अतिरिक्त कोड को लागू नहीं करना चाहता था जब तक कि मैंने यह साबित नहीं किया या मैं जो कोशिश कर रहा हूं उसे पतला करूं। तुमको दिखाने के लिए:

// Google स्थानों को पूरा करने के लिए कोड ऑटो व्यू कंट्रोलर।

GoogleButton.TouchUpInside += (sender, ea) =>
{

    var FakeCoordinates = new CLLocationCoordinate2D()
    {
        Latitude = 54.135364,
        Longitude = -0.797888
    };

    var north = LocationWithBearing(45, 3000, FakeCoordinates);
    var east = LocationWithBearing(225, 3000, FakeCoordinates);

    var autocompleteController = new AutocompleteViewController();
    autocompleteController.Delegate = new AutoCompleteDelegate();
    autocompleteController.AutocompleteBounds = new CoordinateBounds(north, east);
    PresentViewController(autocompleteController, true, null);
                
};
  1. यह वैकल्पिक है, लेकिन मैंने एक स्थानीय सीमा की गणना करने के लिए एक फ़ंक्शन जोड़ा है, मैं 3000 में गुजर रहा हूं यह संख्या मीटर में है, इसलिए यदि आप चाहते हैं कि एक बड़ा प्रारंभिक समायोजन समायोजित करने के लिए स्वतंत्र महसूस हो, तो कृपया ध्यान दें कि Google खोज में अभी भी कोई पता नहीं मिलेगा दुनिया में, यह सिर्फ इस स्थानीय क्षेत्रों के लिए शुरुआती परिणामों को मापता है। यह फ़ंक्शन स्टैक ओवरफ़्लो पोस्ट से उधार लिया गया था, मैंने इसे अपने उद्देश्यों के लिए स्विफ्ट से C # में बदल दिया है:
public CLLocationCoordinate2D LocationWithBearing(Double bearing, Double distanceMeters, CLLocationCoordinate2D origin)
{
    var distRadians = distanceMeters/(6372797.6);

    var rbearing = bearing*Math.PI/180.0;

    var lat1 = origin.Latitude*Math.PI/180;
    var lon1 = origin.Longitude*Math.PI/180;

    var lat2 = Math.Asin(Math.Sin(lat1)*Math.Cos(distRadians) + Math.Cos(lat1)*Math.Sin(distRadians)*Math.Cos(rbearing));
    var lon2 = lon1 + Math.Atan2(Math.Sin(rbearing)*Math.Sin(distRadians)*Math.Cos(lat1),
                    Math.Cos(distRadians) - Math.Sin(lat1)*Math.Sin(lat2));

    return new CLLocationCoordinate2D(latitude: lat2*180/ Math.PI, longitude: lon2*180/Math.PI);
}
  1. यह अंतिम कोड स्निपेट स्वत: पूर्ण के लिए प्रतिनिधि है, हमें इस प्रतिनिधि को सभी को संभालने की आवश्यकता है जो कि Google हमारे पास वापस आएगा:
public  class AutoCompleteDelegate : AutocompleteViewControllerDelegate
{

    public override void DidFailAutocomplete(AutocompleteViewController viewController, NSError error)
    {
        // TODO: handle the error.
        Debug.Print("Error: " + error.Description);
    }


    public override void DidAutocomplete(AutocompleteViewController viewController, Place place)
    {
        Debug.Print(place.Name);
        Debug.Print(place.FormattedAddress);

        viewController.DismissViewController(true, null);
    }

    public override void DidRequestAutocompletePredictions(AutocompleteViewController viewController)
    {
        UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
    }
        
    public override void DidUpdateAutocompletePredictions(AutocompleteViewController viewController)
    {
        UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
    }
        
    public override void WasCancelled(AutocompleteViewController viewController)
    {
        viewController.DismissViewController(true, null);
    }

}

अपनी परियोजना को चलाएं और यह पूरी तरह से काम करना चाहिए, यह उदाहरण काफी फोकस्ड है, लेकिन उम्मीद है कि यह आपको एक बुनियादी उदाहरण देगा कि किसी भी Google स्वत: पूर्ण UI नियंत्रण को कैसे काम करना होगा। धन्यवाद!



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow