菜鸟教程小白 发表于 2022-12-12 11:40:40

ios - MKMapItem 未在 MKPlacemark 上显示正确信息


                                            <p><p>我得到了 <code>MKLocalSearch</code> 的结果,它包括类似...</p>

<pre><code>{
    address =   {
      formattedAddressLine =         (
            &#34;Marton Road&#34;,
            Middlesbrough,
            TS1,
            England
      );
      structuredAddress =         {
            administrativeArea = England;
            areaOfInterest =             (
                &#34;Great Britain&#34;
            );
            country = &#34;United Kingdom&#34;;
            countryCode = GB;
            fullThoroughfare = &#34;Marton Road&#34;;
            geoId =             (
            );
            locality = Middlesbrough;
            postCode = TS1;
            subAdministrativeArea = Middlesbrough;
            thoroughfare = &#34;Marton Road&#34;;
      };
    };
    addressGeocodeAccuracy = 0;
    business =   (
                {
            UID = 9301704419119613323;
            URL = &#34;http://www.cineworld.co.uk&#34;;
            attribution =             (
                              {
                  attributionURLs =                     (
                        &#34;yelp5.3:///biz/cineworld-middlesbrough&#34;,
                        &#34;yelp4:///biz/cineworld-middlesbrough&#34;,
                        &#34;yelp:///biz/cineworld-middlesbrough&#34;,
                        &#34;http://yelp.com/biz/cineworld-middlesbrough&#34;
                  );
                  sourceIdentifier = &#34;com.yelp&#34;;
                  sourceVersion = 1;
                }
            );
            canBeCorrectedByBusinessOwner = 1;
            name = Cineworld;
            source =             (
                              {
                  &#34;source_id&#34; = &#34;b2LOPag6ha6845__dgXehw&#34;;
                  &#34;source_name&#34; = yelp;
                },
                              {
                  &#34;source_id&#34; = 6670;
                  &#34;source_name&#34; = tribune;
                },
                              {
                  &#34;source_id&#34; = 2000000103009680;
                  &#34;source_name&#34; = &#34;acxiom_intl&#34;;
                },
                              {
                  &#34;source_id&#34; = &#34;cineworld-middlesbrough&#34;;
                  &#34;source_name&#34; = &#34;yelp_alias&#34;;
                }
            );
            &#34;star_rating&#34; =             (
                0
            );
            telephone = &#34;+448712002000&#34;;
      }
    );
    center =   {
      lat = &#34;54.57633773904653&#34;;
      lng = &#34;-1.228197113614671&#34;;
    };
    inputLanguage = en;
    localSearchProviderID = 9902;
    mapRegion =   {
      eastLng = &#34;-1.224891596539819&#34;;
      northLat = &#34;54.57545000290778&#34;;
      southLat = &#34;54.5738619816233&#34;;
      westLng = &#34;-1.227631256834202&#34;;
    };
    name = Cineworld;
    type = 57;
}
</code></pre>

<p>现在当我将它添加到我的 map 时...</p>

<pre><code>id &lt;MKAnnotation&gt; annotation = mapItem.placemark;

;
</code></pre>

<p>它添加了一个图钉,当我点击它时会显示“Marton Road”,但我希望它显示“Cineworld”。</p>

<p>我发现很难找到任何关于从 <code>MKMapItem</code> 和 <code>MKPlacemark</code> 中获取内容的信息。</p>

<p>如果我尝试在地标中使用 <code>mapItem.name</code>,那么它们都会显示“美国”。</p>

<p>知道如何从中获得更多有用的信息吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><code>MKPlacemark</code> 返回其 <code>title</code> 属性的地址,而 <code>MKPlacemark</code> 类不允许您设置 <code>title</code>自己。 </p>

<p>你可以做的是创建一个 <code>MKPointAnnotation</code> (它有一个可设置的 <code>title</code> 属性)并将它的 <code>title</code> 设置为你想要的任何东西 <code>mapItem.name</code>.</p>

<p>例如:</p>

<pre><code>MKPointAnnotation *pa = [ init];
pa.title = mapItem.name;
pa.coordinate = mapItem.placemark.coordinate;
;
</code></pre>

<p><br/>
<strong>注意:</strong><br/>
您不必使用 <code>MKPointAnnotation</code> 类(它只是最方便的)。<br/>
您还可以使用符合 <code>MKAnnotation</code> 并具有可设置 <code>title</code> 属性的自定义类(或返回 <code>MKMapItem</code> 的某些类code>name</code> 作为它的 <code>title</code>)。</p>

<p>另请注意,如果您希望能够在事后添加的注释中访问相关的 <code>MKMapItem</code> 或 <code>MKPlacemark</code>(例如,在 mapView 中)委托(delegate)方法),您需要使用自定义类而不是 <code>MKPointAnnotation</code> 在其中添加可以在创建注释时设置的“sourceMapItem”或“sourcePlacemark”属性。 </p>

<p>这样,您可以根据需要设置 <code>title</code>,但仍然可以访问注释对象所在的所有原始 <code>MKMapItem</code> 或 <code>MKPlacemark</code> 值已创建(如果仅使用 <code>MKPointAnnotation</code> 则无法轻松做到这一点,因为它不保留对源 map 项或地标的引用)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - MKMapItem 未在 MKPlacemark 上显示正确信息,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/25532687/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/25532687/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - MKMapItem 未在 MKPlacemark 上显示正确信息