0

我对放置在 iPad 上的表格视图单元格中的按钮有一个奇怪的问题。

这里有两张截图便于理解(按钮在右侧,背景为白色):

苹果手机

iPad

iPhone 没有问题,但在 iPad 上这个按钮没有响应。定位似乎是正确的,因为它是正确绘制的。

这是我的自定义 UITableViewCell 中的代码:

rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
[rightButton setContentMode:UIViewContentModeCenter];
[rightButton setBackgroundColor:[UIColor whiteColor]];
int xPos = buttonWidth-rightButton.frame.size.width;
[rightButton setFrame:CGRectMake(xPos, 0, buttonHeight, buttonHeight)];
[self.contentView addSubview:rightButton];

//buttonWidth = 310, buttonHeight = 60

图像和目标由另一个类设置:

[cell.rightButton setImage:[UIImage imageNamed:@"options.png"] forState:UIControlStateNormal];
[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside];

在将所有元素放入单元格后,我也尝试过

 [self.contentView bringSubviewToFront: rightButton];

以确保按钮位于最上面。

没用。

对此有什么想法吗?


我仍然找不到解决方案。

在此期间我做了什么:

  • 可视化放置在单元格中的所有对象(以显示不需要的重叠)
  • 在所有其他单元格对象上禁用用户交互

还有其他想法吗?

4

2 回答 2

0

好的,我发现了一些东西:

对于 iPad,该按钮仅在水平放置在前 320 个像素之间时才会响应。

这是调试器在触摸按钮时所说的内容(位于右侧较远的位置):

(lldb) po touches
(NSSet *) $1 = 0x08249cd0 {(
<UITouch: 0x82c63d0> phase: Began tap count: 1 window: <UIWindow: 0x8266ca0;
frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; 
layer = <UIWindowLayer: 0x8266d60>> view: <SBMultiCell: 0x82cb8a0; baseClass = UITableViewCell; 
frame = (0 0; 744 93); autoresize = W; layer = <CALayer: 0x82cb830>> 
location in window: {713, 123} previous location in window: {713, 123} 
location in view: {701, 44} previous location in view: {701, 44}
)}

(lldb) po rightButton
(UIButton *) $2 = 0x082cd500 <UIButton: 0x82cd500; 
frame = (658 0; 86 86); opaque = NO; layer = <CALayer: 0x82cd5e0>>

触摸位置恰好在按钮尺寸之间,并且所有内容都正确绘制。正如我之前写的,没有重叠的元素或类似的东西......

于 2012-08-02T16:56:54.960 回答
0

首先试试这个:

rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
[rightButton setContentMode:UIViewContentModeCenter];
[rightButton setBackgroundColor:[UIColor whiteColor]];
int xPos = buttonWidth-rightButton.frame.size.width;
[rightButton setFrame:CGRectMake(xPos, 0, buttonHeight, buttonHeight)];
[self.contentView addSubview:rightButton];
[self.contentView bringSubviewToFront: rightButton]
[self.contentView bringSubviewToFront: rightButton];
rightButton.userInteractionEnabled = YES;

[cell.rightButton setImage:[UIImage imageNamed:@"options.png"] forState:UIControlStateNormal];
[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside];
[cell.rightButton setUserInteractionEnabled:YES];

或者你也可以在你的按钮上添加一个点击手势,它会解决这个问题:而不是这条线,

[cell.rightButton addTarget:self action:@selector(showOptions:) forControlEvents:UIControlEventTouchUpInside];

写这个,

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showOptions:)];
cell.rightButton addGestureRecognizer:tap];
[cell.rightButton setUserInteractionEnabled:YES];
于 2012-07-24T17:47:03.277 回答