Действие iOS UIBarButtonItem проваливается на кнопку позади него
Я создаю пользовательский UIView, чтобы действовать как всплывающее окно с панелью инструментов. Действие для каждого элемента UIBarButtonItem на панели инструментов запускается, как ожидается, на симуляторе iPhone, но не на симуляторе iPad или iPad. Вместо этого запускается действие для кнопки за всплывающим окном. Я нацеливаюсь на iOS 8. В чем может быть проблема?
Это где пользовательский вид создается. Это внутри подкласса UIView. Содержит селекторы:
-(void)setupButtons: (SandBoxViewController*)ctrl :(UIImage*)img1 :(UIImage*)img2 :(UIImage*)img3 :(CGRect) rect
{
controller=ctrl;
CGRect frame = CGRectMake(rect.origin.x-12, rect.origin.y, rect.size.width*4, TOOLBARH);
toolbar = [[UIToolbar alloc]initWithFrame:frame];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
UIBarButtonItem *customItem1 = [[UIBarButtonItem alloc]
initWithImage:img1 style:UIBarButtonItemStylePlain
target:self action:@selector(setToOne:)];
UIBarButtonItem *customItem2 = [[UIBarButtonItem alloc]
initWithImage:img2 style:UIBarButtonItemStylePlain
target:self action:@selector(setToTwo:)];
UIBarButtonItem *customItem3 = [[UIBarButtonItem alloc]
initWithImage:img3 style:UIBarButtonItemStylePlain
target:self action:@selector(setToThree:)];
NSMutableArray *toolbarItems = [NSMutableArray arrayWithObjects:customItem1, customItem2,customItem3,nil];
[toolbar setItems:toolbarItems];
[self addSubview:toolbar];
}
Это создает пользовательское представление и вызывает вышеуказанную функцию. Это в ViewController:
-(void)setupLongPressButtonView: (CGRect)frame
{
self.buttonView =[[LinkButtonView alloc]initWithFrame:frame];
UIImage *image1=[[UIImage imageNamed:@"connect1.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *image2=[[UIImage imageNamed:@"connect2.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *image3=[[UIImage imageNamed:@"connect3.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//retrieves the button that I want the popup to be placed above
UIBarButtonItem *button=[self.toolbarItems objectAtIndex:self.linkButtonIndex];
CGRect buttonFrame=button.customView.frame;
[self.buttonView setupButtons:self :image1 :image2 :image3 :buttonFrame];
[self.view addSubview:self.buttonView];
CGRect superv=self.view.frame;
CGRect subv=self.buttonView.frame;
NSLog(@"superview bounds: %f,%f,%f,%f. subview bounds: %f,%f,%f,%f",superv.origin.x,superv.origin.y,superv.size.width,superv.size.height,subv.origin.x,subv.origin.y,subv.size.width,subv.size.height);
}
При длительном нажатии на кнопку с надписью "Ссылка" открывается всплывающее окно. Обратите внимание, что всплывающие кнопки просмотра отображаются ОК, но нажатие на них вызывает срабатывание действия кнопки позади них (как если бы оно игнорировало представление).
Примечание: я также пытался создать пользовательское представление с UIButton для UIBarButtonItem, но это не имело никакого значения.
Обновление: Вот границы суперпредставления и представление, содержащее рассматриваемые кнопки: границы суперпредставления: 0,000000,0,000000,768.000000,1024.000000 границы подпредставления: 0,000000,912.000000,224.000000,56,000000 Таким образом, подпрограмма находится в пределах ограничений супер
1 ответ
как будто это игнорирует вид
Абсолютно верно. Это игнорирует это. Всплывающее окно выходит за пределы своего суперпредставления. Представление за пределами своего суперпредставления по умолчанию неприкосновенно. Удары по нему просто проваливаются, как будто его там не было. Это абсолютно нормальное, ожидаемое поведение.