0

動的に作成されたボタンの中に、動的に作成されたビューがあります。ボタンをクリックしている間、ビューとボタンの両方のタグを取得する必要があります。私はコードを次のように使用しました

-(void)addButton
{
    for (int j=0; j<[defaultNumberAry count]; j++) {

    numberButton=[[UIButton alloc]initWithFrame:CGRectMake(n, 0, 40, 40)];
    n=n+42;
    [numberButton setBackgroundImage:[defaultNumberAry objectAtIndex:j] forState:UIControlStateNormal];
    numberButton.tag=j;
    [numberTagAry addObject:[NSString stringWithFormat:@"%d",j]];
    numberButton.userInteractionEnabled = YES;
    [numberButton addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchUpInside];
    numberButton.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
    [numberView addSubview:numberButton];

}
}
-(void)addView:(int)yv
{
n=22;
numberView=[[UIView alloc]initWithFrame:CGRectMake(300, yv, 400, 44)];
numberView.backgroundColor=[UIColor yellowColor];
numberView.tag=b;
b++;
numberView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touched:)];
[tapGestureRecognizer setNumberOfTapsRequired:1];
[numberView addGestureRecognizer:tapGestureRecognizer];

}
-(void)pressed:(id)sender{
    UIButton *button = (UIButton *)sender;
    if(!button.selected){
        NSLog(@"selected btn tag:%d",button.tag);       
                       }
}
- (void) touched:(id)sender
{
    int v=((UIGestureRecognizer *)sender).view.tag;
    NSLog(@"view tag:::%d",v);

  }

コントロールがボタンを押すこともあれば、タッチして表示することもあります。一度に両方のタグを取得する必要があります。前もって感謝します

4

2 に答える 2

5

このようにサブビューを追加すると、次のようになります。

[numberView addSubview:numberButton];

numberButtonサブビューになりnumberViewます; のスーパービューにもnumberViewなります。そして、あなたはそのプロパティを通してそれにアクセスすることができます。numberButton

-(void)pressed:(id)sender{
    UIButton *pressedButton = (UIButton *)sender;
    UIView *superViewOfPressedButton = pressedButton.superview;
    NSLog(@"Tag of button:%i Tag of pressed button's button view is %i",pressedButton.tag,superViewOfPressedButton.tag);
}
于 2012-04-24T05:28:34.203 に答える
0

通常、ユーザーのタッチを1か所でキャプチャするだけで、2つではありません。GestureRecognizerをここに完全にドロップして、ボタンのタッチイベントを使用することができます。

次に、必要な次のビットを実行するためのいくつかのオプションがあります。上記の場合は「押された」ボタンのタッチハンドラーで、ボタンとなるsender.tagと、ビューとなるsender.superview.tagを取得できます。

または、数式を使用して1つのタグを使用することもできます。たとえば、(view.tag * 1000)+(button.tag)です。つまり、最初のビューの最初のボタンには1001のタグが付いています。1000はビューを表し、1はボタンを表します。5番目のビューの8番目のボタンは5008になります。元の数値を抽出するには、簡単な計算を行う必要があります。

于 2012-04-24T05:28:14.217 に答える