UIButton 不适用于 didSelectAnnotationView
UIButton is not working on didSelectAnnotationView
您好,当用户点击图钉制作器时,我在 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");
}
我已经使用了上面的代码,它不起作用请告诉我我在哪里做错了如何解决这个问题。
提前致谢。
您需要先将子视图添加到您的自定义视图,然后它才起作用。
-(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];
}
检查此代码
它不起作用,因为 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
}
完全没有必要自己构建注解标注视图,只需更改默认视图的设计即可。
您好,当用户点击图钉制作器时,我在 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");
}
我已经使用了上面的代码,它不起作用请告诉我我在哪里做错了如何解决这个问题。
提前致谢。
您需要先将子视图添加到您的自定义视图,然后它才起作用。
-(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];
}
检查此代码
它不起作用,因为 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
}
完全没有必要自己构建注解标注视图,只需更改默认视图的设计即可。