0

その上にラベルが付いたボタンがあります。ラベルがボタンをブロックしているため、クリックできません。

timerView = [[UIView alloc] initWithFrame:CGRectMake(0, 278, 105, 27)];
[self.view addSubview:timerView];

UIButton *timerBackground = [UIButton buttonWithType:UIButtonTypeCustom];
[timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"] forState:UIControlStateNormal];
[timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"] forState:UIControlStateHighlighted];
[timerBackground addTarget:self action:@selector(openTimeChanger) forControlEvents:UIControlEventTouchUpInside];
timerBackground.frame = CGRectMake(-2 , 15, 102, 27);
[timerView addSubview:timerBackground];

DateDay = [[UILabel alloc] initWithFrame:CGRectMake(6, 4, 20, 21)];
DateDay.backgroundColor = [UIColor clearColor];
DateDay.textColor = [UIColor whiteColor];
[timerBackground addSubview:DateDay];

ボタンをクリックできるように、ラベルをクリックに対して「透明」にしたい。

4

3 に答える 3

1

UILabel はタッチをブロックしませんが、ビュー階層はブロックします。これをデバッグするためにいくつかの色を追加しました:

ここに画像の説明を入力

  1. timerView — 緑
  2. timerBackground — 赤
  3. デートデイ - 黒

ご覧のとおり、ボタンはその親を拡張しているため、実際には、ボタンと親がラベルの下で重なっている黒い四角形の最上部をクリックすると、緑の境界の外側はすべて非アクティブになります。タップ イベントが発生します。

これを修正するには、ビューが互いに内側になるようにビューを揃えるだけです。

于 2012-11-27T03:31:39.643 に答える
0

ラベルビューはボタンの一番上にありますこのようにコードを変更するだけです

  timerView = [[UIView alloc] initWithFrame:CGRectMake(0, 278, 105, 27)];
 [self.view addSubview:timerView];

  DateDay = [[UILabel alloc] initWithFrame:CGRectMake(6, 4, 20, 21)];
  DateDay.backgroundColor = [UIColor clearColor];
  DateDay.textColor = [UIColor whiteColor];
  [timerBackground addSubview:DateDay];

  UIButton *timerBackground = [UIButton buttonWithType:UIButtonTypeCustom];
 [timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"]forState:UIControlStateNormal];
 [timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"]forState:UIControlStateHighlighted];
 [timerBackground addTarget:self action:@selector(openTimeChanger)  forControlEvents:UIControlEventTouchUpInside];
  timerBackground.frame = CGRectMake(-2 , 15, 102, 27);
  [timerView addSubview:timerBackground];
于 2012-11-27T03:45:31.950 に答える
0

これを試して、

DateDay.userInteractionEnabled = NO;

また、この上に他のビューがないかどうかも確認してください。ビューを適切に調整して、タッチを検出します。フレームをCGRectMake(-2 , 15, 102, 27);外側の領域として設定している場合timerView、タッチは検出されません。

以下のようにコードを変更してタッチを検出できるかどうかを確認します。

timerView = [[UIView alloc] initWithFrame:CGRectMake(0, 278, 105, 27)];
[self.view addSubview:timerView];

UIButton *timerBackground = [UIButton buttonWithType:UIButtonTypeCustom];
[timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"] forState:UIControlStateNormal];
[timerBackground setBackgroundImage:[UIImage imageNamed:@"Time Background.png"] forState:UIControlStateHighlighted];
[timerBackground addTarget:self action:@selector(openTimeChanger) forControlEvents:UIControlEventTouchUpInside];
timerBackground.frame = CGRectMake(0, 0, 100, 27);
[timerView addSubview:timerBackground];

DateDay = [[UILabel alloc] initWithFrame:CGRectMake(6, 4, 20, 21)];
DateDay.backgroundColor = [UIColor clearColor];
DateDay.textColor = [UIColor whiteColor];
[timerBackground addSubview:DateDay];

timerBackgroundのフレームを として保持したい場合は、追加するのではなくCGRectMake(-2 , 15, 102, 27);のサブビューとして追加し、フレームを次のように設定します。self.viewtimerView

timerBackground.frame = CGRectMake(0, 263, 100, 27);//or timerBackground.frame = CGRectMake(-2, 263, 102, 27);

サブビューを次のように追加します。

[self.view addSubview:timerBackground];

補足dateDayとして、変数名に使用してください。

于 2012-11-27T03:31:43.327 に答える