0

我创建了一个自定义按钮,为什么我需要在@selector 中作为参数传递。自定义按钮是 annotationView 的一部分。在 CustomButton 中,我将其作为属性 UIButtonType,但在输出中什么也没有出现。输出是一个没有任何内容的按钮,当我想要打开视图控制器时,当我在注释内部进行修饰时会消失。

这是 CustomButton.h 中的代码

@interface CustomButton : UIButton{

}

@property (nonatomic, strong)NSString * name;
@property (nonatomic, assign)UIButtonType  typeButton;
@end

在 CustomButton.m

@implementation CustomButton.h

@synthesize name;
@synthesize buttonType;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

         self.typeButton = UIButtonTypeInfoLight;

    }
return self;
}

在 MapViewController.m

 -(void)loadDetailListViewController: (CustomButton *)aName{ 

             //I want to open a viewController 
             //.......
  }

 - (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id 
 <MKAnnotation>)annotation
  {
       //.......  

       MKPinAnnotationView *annotationView = (MKPinAnnotationView*) [mapView 
                dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];


       annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
                                                  reuseIdentifier:AnnotationIdentifier];

     //.........

     CustomButton *rightButton = [CustomButton buttonWithType:UIButtonTypeCustom];
     [rightButton setName:[NSString stringWithFormat:@"%@", self.nameTable]];

     [rightButton addTarget:self action: @selector(loadDetailListViewController:) 
                                forControlEvents:UIControlEventTouchUpInside];

     annotationView.rightCalloutAccessoryView = rightButton;
     annotationView.canShowCallout = YES;
     annotationView.draggable = YES;
     return annotationView;
   }

为什么当我触摸里面的注解消失了?

4

1 回答 1

1

请务必遵循文档说明:

buttonWithType:创建并返回指定类型的新按钮。

  • (id)buttonWithType:(UIButtonType)buttonType

参数

buttonType 按钮类型。有关可能的值,请参见 UIButtonType。

返回值

一个新创建的按钮。

讨论 此方法是一种方便的构造函数,用于创建具有特定配置的按钮对象。如果您将 UIButton 子类化, 则此方法不会返回您的子类的实例。如果要 创建特定子类的实例,则必须 直接分配/初始化按钮。

创建自定义按钮(即 UIButtonTypeCustom 类型的按钮)时,按钮的框架最初设置为 (0, 0, 0, 0)。在将按钮添加到界面之前,您应该将框架更新为更合适的值。

当您使用UIButtonTypeCustomat 时,您的代码会以某种方式工作,如果有人更改它(例如 to )buttonWithType:,就会发生不好的事情。UIButtonTypeRoundedRect

由于您没有CustomButton -initWithFrame:在代码中的任何地方使用但提供了它的实现,我可以建议您将它用作所需的初始化程序,这很好。

于 2012-11-08T14:43:42.240 回答