Что я хочу сделать, так это отправить форму с моей кнопкой, чтобы я мог рассчитать, какая из них была нажата. Мои кнопки создаются динамически, и все они выполняют одну и ту же функцию, которая загружает новое представление, я хочу знать, какая кнопка была нажата, чтобы я мог отобразить правильные данные в новом представлении.
У меня есть NSMutableArray аннотаций, в которые я добавляю кнопку к деталям булавки. Кнопка работает и загружает следующий вид, но я хочу выяснить, какая кнопка была нажата.
Я использую синглтон с массивом NSMutableArray. Синглтон зовут Хелпер
То, что я сделал, было:
Helper* array = [Helper sharedManager];
int clickedNum = [array.array indexOfObject:annotation];
[myDetailButton setTag:clickedNum];
[myDetailButton addTarget:self action:@selector(moreInfo:event:) forControlEvents:UIControlEventTouchUpInside];
Именно здесь я создаю аннотации, которые идут на карту. Следующая строка - это идентификатор моей функции
- (IBAction)moreInfo:(UIButton*)sender
И здесь я хочу получить тег
Helper *array = [Helper sharedManager];
array.clicked = sender.tag;
Когда я запускаю это и нажимаю на кнопку в одной из моих аннотаций, я получаю исключение, которое говорит NSInvalidArgumentException, причина: - (MapViewController moreInfo: event:]
Любая помощь будет оценена
Edit:
По запросу интерфейса для помощника:
@interface Helper : NSObject {
NSMutableArray *array;
int clicked;
}
@property (nonatomic, retain) NSMutableArray *array;
@property (nonatomic) int clicked;
+(id)sharedManager;
@end
Также я подумал, что стоит добавить:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
static NSString *identifier = @"Events";
MKPinAnnotationView *retval = nil;
if ([annotation isKindOfClass:[Events class]])
{
(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (retval == nil) {
retval = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
Helper *array = [Helper sharedManager];
int clickedNum = [array.array indexOfObject:annotation];
// Set up the Left callout
UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeCustom];
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[myDetailButton setTag:clickedNum];
NSLog([NSString stringWithFormat:@"Testing tag: %@", clickedNum]);
[myDetailButton addTarget:self action:@selector(moreInfo:) forControlEvents:UIControlEventTouchUpInside];
// Set the image for the button
[myDetailButton setImage:[UIImage imageNamed:@"icon72.png"] forState:UIControlStateNormal];
// Set the button as the callout view
retval.leftCalloutAccessoryView = myDetailButton;
}
if (retval) {
[retval setPinColor:MKPinAnnotationColorGreen];
retval.animatesDrop = YES;
retval.canShowCallout = YES;
}
}
return retval;
}