4

プログラムでボタンを作成していて、ボタンをタップ/押すと、もう一度タップしない限りハイライトされたままになる機能を追加したいと思います。私が今していることは、ボタンを作成してから、IBActionを追加しようとしていることです。ただし、問題は、メソッドにボタンを作成しているため、IBActionでボタンを参照する方法がわからないことです。これが私のコードです:

UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
  [testButn setFrame:CGRectMake(0, 135, 40, 38)];
  [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal];
  [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"]   forState:UIControlStateHighlighted];
[testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside];
[self.contentview addSubview:testButn

-(IBAction)staypressed:(id)sender{

//Not sure what to do here, since this method doesn't recognize testButn, How do I reference testButn
4

3 に答える 3

9

送信者はtestButnです。stayPressedの引数タイプを(id)から(UIButton *)に変更する必要があります

アクションメソッドがいくつかの異なるクラスのオブジェクトに接続されていない限り、idを使用しているオブジェクトクラスに置き換えるのが最善です。これは、IBで物事をフックする場合に役立ちます。これは、間違った種類のオブジェクトにフックすることができないためです。

それが機能していないという事実は、それがあなたのボタンを認識しないからではありません。あなたのアプローチは間違っています。タッチダウンするにはアクションを接続する必要があると思います。おそらく、選択した状態をYESに設定します。ボタンの定義で、選択した状態のimageForState:を設定する必要があります。あなたが今それをしている方法では、そのメソッドは修正するまで呼び出されません。

このようなもの:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
    [testButn setFrame:CGRectMake(0, 135, 40, 38)];
    [testButn setImage:[UIImage imageNamed:@"New_PICT0019.jpg"] forState:UIControlStateNormal];
    [testButn setImage:[UIImage imageNamed:@"New_PICT0002.jpg"]   forState:UIControlStateSelected];
    [testButn addTarget:self action:@selector(stayPressed:) forControlEvents:UIControlEventTouchDown];
    [self.view addSubview:testButn];
}

-(void)stayPressed:(UIButton *) sender {
    if (sender.selected == YES) {
        sender.selected = NO;
    }else{
        sender.selected = YES;
    }
}
于 2013-01-31T16:22:10.393 に答える
2

送信者をUIButtonにキャストする必要があります。

- (IBAction)staypressed:(id)sender
{
    UIButton *theButton = (UIButton*)sender;

    //do something to theButton
}
于 2013-01-31T16:22:00.690 に答える
2
UIButton* testButn = [UIButton buttonWithType:UIButtonTypeCustom];
  [testButn setFrame:CGRectMake(0, 135, 40, 38)];
  [testButn setImage:[UIImage imageNamed:@"test_butn_un.png"] forState:UIControlStateNormal];
  [testButn setImage:[UIImage imageNamed:@"test_butn_pressed.png"]   forState:UIControlStateHighlighted];
  [testButn addTarget:self action:@selector(staypressed:) forControlEvents:UIControlEventTouchUpInside];
  testButn.tag = 1;
  [self.contentview addSubview:testButn

-(IBAction)staypressed:(id)sender
 {
     if ([sender tag]==1)
     {
         somecodes...
     }
 }
于 2013-01-31T16:55:49.513 に答える