我创建了一个CustomButton,为什么我需要在@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;
}
为什么当我在注释内部修饰消失?
答案 0 :(得分:1)
请按照文档说明进行操作:
buttonWithType:创建并返回指定的新按钮 类型。
- (id)buttonWithType:(UIButtonType)buttonType
参数
buttonType按钮类型。有关可能的值,请参阅UIButtonType。
返回值
新创建的按钮。
讨论此方法是用于创建的便利构造函数 具有特定配置的按钮对象。 它是UIButton的子类, 此方法不返回子类的实例。如果你想要 要创建特定子类的实例,必须分配/初始化 直接按钮。
创建自定义按钮时 - 即具有该类型的按钮 UIButtonTypeCustom - 按钮的框架设置为(0,0,0,0) 原来。在将按钮添加到界面之前,您应该这样做 将帧更新为更合适的值。
当您在UIButtonTypeCustom
使用buttonWithType:
时,您的代码会以某种方式运作,如果有人更改了错误,就会发生错误(例如UIButtonTypeRoundedRect
)。
由于您未在代码中的任何位置使用CustomButton -initWithFrame:
但提供了它的实现,我建议您希望将其用作所需的初始化程序,这很好。