iphone UIB-кнопка выбора не работает, когда начало кадра не 0,0 - PullRequest
1 голос
/ 13 сентября 2011

Я пробовал много разных способов, но не могу найти, что не так с моим кодом, надеюсь, вы мне поможете!

Я делаю собственный пузырь выноски, который будет отображаться при нажатии на булавку на карте, чтобы показать некоторые изображения внутри пузыря, и мне нужна кнопка detaildisclosure, чтобы пользователь мог щелкнуть и получить доступ к дополнительной информации. Моя проблема в том, что пузырь и кнопка отображаются, но нажатие на кнопку не вызывает метод выбора.

// РЕДАКТИРОВАТЬ: извините, потому что в первый раз, когда я добавляю слишком много кода, я буду редактировать, пытаясь быть более конкретным, спасибо за ваши ответы

В методе:

- (id) initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier

Сначала я показываю изображение, чтобы изменить пользовательский значок вместо обычного пина

self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
self.frame = CGRectMake(0, 0, kWidth, kHeight);
self.backgroundColor = [UIColor clearColor];

imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon.png"]];
imageView.frame = CGRectMake(kBorder, kBorder, kWidth - 2 * kBorder, kWidth - 2 * kBorder);
[self addSubview:imageView];

Я добавляю его как подпредставление, и в то же время, чтобы настроить выноску пузыря, я создаю несколько меток и изображений и добавляю в представление calloutView, которое сначала скрыто, пока метод выбора вывода не будет вызван

   calloutView = [[UIView alloc] initWithFrame:CGRectMake(10, 30, restNameLbl.frame.size.width + 30, 60)];
   calloutView.hidden = YES;

После этого я создаю прямоугольник с закругленными углами и размер для текста, я пропускаю эту часть кода, потому что я не думаю, что это сейчас важно, дайте мне знать, если я это сделаю, я использую некоторые графические функции для имитации по умолчанию iphone bubble map sytle

И я добавляю все созданные ранее элементы в calloutView:

[calloutView addSubview:backgroundRect];         
[calloutView addSubview:restNameLbl];        
[calloutView addSubview:likeImg];
[calloutView addSubview:likesLbl]; 
[calloutView addSubview:noLikeImg];
[calloutView addSubview:noLikesLbl];

А потом я помещаю этот вид в нужное место

//position callout above pin
calloutView.frame = CGRectMake(-25, -calloutView.frame.size.height-10, calloutView.frame.size.width + 50, calloutView.frame.size.height);       
[self addSubview:calloutView];

И в том же пузырьковом представлении - называемом calloutView. Я хочу показать кнопку подробного раскрытия, чтобы пользователь мог получить доступ к дополнительной информации, но если я добавлю ее непосредственно в calloutView, события селектора никогда не инициируются. Поэтому я попытался сделать это по-другому, добавив кнопку в родительское представление, изменив скрытое состояние на «да» и показав его в методе выбора

accessory = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[accessory setTitle:myAnnotation.idRest forState:UIControlStateNormal];
accessory.hidden= YES;  

// ПРИМЕЧАНИЕ: здесь проблема в том, что если я опускаю эту строку кадра, все работает идеально или если я установил origin.x и origin.y равными 0,0, но когда я изменил это число, чтобы показать его в правильном месте просмотра перестает работать селектор кнопок

accessory.frame = CGRectMake(110, calloutView.frame.origin.y+25, accessory.frame.size.width, accessory.frame.size.height);

Затем я добавляю событие селектора к вызываемому при щелчке, и, как я уже сказал, функция calloutAccessoryTap вызывается только в том случае, если в рамке аксессуара не указано, или если origin.x и y оба установлены в 0

accessory.userInteractionEnabled = YES;
[accessory addTarget:self action:@selector(calloutAccessoryTap) forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchCancel];

И в последний раз я добавил кнопку в основной вид

[self addSubview:accessory];

Таким образом, вначале вид - это просто значок, вид выноски с метками и изображениями скрыт, то же самое происходит с кнопкой детализации, и когда выбран пин-код, и необходимо отобразить всплывающую подсказку и кнопку вызова. показаны. Все видно прямо на экране, но когда рамка аксессуара установлена ​​в правильное положение, отличное от начала координат x и y 0,0, селектор перестает работать.

Надеюсь, вы сможете мне помочь, потому что я пробовал много разных вещей, но ни одна из них не работает.

1 Ответ

1 голос
/ 13 сентября 2011

На прохождение кода уходит много времени, поэтому я просто дам вам указатель.Вы добавляете подпредставления поверх UIButton "accessory"?Если да, то, конечно, кнопка не будет обнаруживать нажатия.Подвиды добавляются друг на друга, поэтому прозрачный вид сверху кнопки фактически делает ее бесполезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...