【问题标题】:UIButton is not working on didSelectAnnotationViewUIButton 在 didSelectAnnotationView 上不起作用
【发布时间】:2015-04-01 06:20:12
【问题描述】:

您好,当用户点击 pin 制造商时,我在 didSelectAnnotationView 中有自定义视图,我正在使用 UILabel 和 UIButton 显示自定义视图,一切正常,但 UIButton 不可点击,请告知如何解决此问题。

我的代码。

     -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view1
     {
            NSString *bult;

       if ([view1.annotation isKindOfClass:[MapPin class]]) {
            MapPin *annot = view1.annotation;
            NSLog(@"tit%@",annot.nsname);
            bult=annot.nsname;

         }


     myview = [[UIView alloc]initWithFrame:CGRectMake(-60, -110, 200, 100)];
     myview.layer.cornerRadius = 10;
     myview.backgroundColor = [UIColor yellowColor];
     myview.userInteractionEnabled = YES;
     [view1 addSubview:test];

     buldingname = [[UILabel alloc] initWithFrame:CGRectMake(5, -15, 150, 80)];
     buldingname.text=bult;
     [buldingname setTextColor:[UIColor blackColor]];
     [buldingname setBackgroundColor:[UIColor clearColor]];
     [buldingname setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
     buldingname.lineBreakMode = NSLineBreakByWordWrapping;
     buldingname.numberOfLines = 3;

     [myview addSubview:buldingname];


    moredetail=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    moredetail.frame= CGRectMake(0, 55, 200, 50);
   [moredetail setTitle:@"Click here for more details" forState:UIControlStateNormal];
   [moredetail addTarget:self action:@selector(nextbtn:) forControlEvents:UIControlEventTouchUpInside];

   [moredetail setExclusiveTouch:YES];
   [myview addSubview:moredetail];


 }

我的调用方法。

    - (IBAction)nextbtn:(id)sender
   {
        NSLog(@"click");
   }

我已经使用了上面的代码它不起作用请告诉我我做错了如何解决这个问题。

提前致谢。

【问题讨论】:

    标签: ios uibutton mkannotationview


    【解决方案1】:

    它不起作用,因为 mapView 仍然处理触摸事件。 只需在以下位置添加一个 DetailView:

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
    {
    
        if ([annotation isKindOfClass:[MKUserLocation class]])
            {
                return nil;
            }
    
        static NSString *reuseIdentifier = @"Your_identifier";
    
        MKAnnotationView *view = [mapView dequeueReusableAnnotationViewWithIdentifier:reuseIdentifier];
        if (view == nil)
        {
            view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIdentifier];
            view.image = [UIImage imageNamed:@"your_annotaion_image.png"];
        }
    
         view.canShowCallout = YES;
    
         UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
         [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
         view.rightCalloutAccessoryView = rightButton;
    
         UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"your_icon_image"]];
         view.leftCalloutAccessoryView = icon;
    
         return view;
        }
    

    然后你可以调用:

    -(void)showDetails:(UIButton*)button
    {
       //do your stuff here
    }
    

    完全没有必要自己构建注释标注视图,只需更改默认的设计即可。

    【讨论】:

      【解决方案2】:

      您需要将子视图添加到您的自定义视图中,然后才能正常工作。

      -(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view1
           {
                  NSString *bult;
      
             if ([view1.annotation isKindOfClass:[MapPin class]]) {
                  MapPin *annot = view1.annotation;
                  NSLog(@"tit%@",annot.nsname);
                  bult=annot.nsname;
      
               }
      
      
           myview = [[UIView alloc]initWithFrame:CGRectMake(-60, -110, 200, 100)];
           myview.layer.cornerRadius = 10;
           myview.backgroundColor = [UIColor yellowColor];
           myview.userInteractionEnabled = YES;
           [view1 addSubview:myview];
      
           buldingname = [[UILabel alloc] initWithFrame:CGRectMake(5, -15, 150, 80)];
           buldingname.text=bult;
           [buldingname setTextColor:[UIColor blackColor]];
           [buldingname setBackgroundColor:[UIColor clearColor]];
           [buldingname setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
           buldingname.lineBreakMode = NSLineBreakByWordWrapping;
           buldingname.numberOfLines = 3;
      
           [myview addSubview:buldingname];
      
      
          moredetail=[UIButton buttonWithType:UIButtonTypeRoundedRect];
          moredetail.frame= CGRectMake(0, 55, 200, 50);
         [moredetail setTitle:@"Click here for more details" forState:UIControlStateNormal];
         [moredetail addTarget:self action:@selector(nextbtn:) forControlEvents:UIControlEventTouchUpInside];
      
         [moredetail setExclusiveTouch:YES];
         [myview addSubview:moredetail];
      
      
       }
      

      检查此代码

      【讨论】:

        猜你喜欢
        • 2015-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多