2

私はUIButtonを持っています。次のようにターゲットをバインドしました。

[button addTarget:self action:@selector(myFunction) 
                forControlEvents:UIControlEventTouchUpInside];

ボタンをすばやく複数回クリックすると、ターゲット関数が複数回呼び出されます。ボタンをタップすると、新しいビューコントローラーが表示されます。すばやく 3 回クリックすると、新しいビュー コントローラーが 3 回表示されます。

これは何か愚かです。ビューが新しいビューコントローラーに移行したら、関数を再度トリガーするポイントは何ですか。地獄のアップルは、なぜこのようなばかげたことをするのですか?

助けてください。

4

4 に答える 4

3

First of all its not apple bugs. It should be handle manually. So follow these step

First make your global instance of your button then do this

.h file

@property (weak, nonatomic) IBOutlet UIButton *btn;

.m file

- (IBAction)myFunction:(id)sender
{
    self.btn.userInteractionEnabled = NO;
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.btn.userInteractionEnabled = YES;
}
于 2015-06-22T05:43:29.560 に答える
2

「isItDone」のようなグローバル bool フラグを 1 つ取得するか、シングルトン クラスで宣言します。

  1. 「myFunction」でfalseに設定
  2. そのクラスの「ViewDidAppear」メソッドでその関数をプッシュするViewコントローラーをtrueに設定します。

それはあなたを助けるでしょう。私は同じ問題を抱えており、1 つのグローバル変数を使用してそれを管理することは良い解決策です。

于 2015-06-22T05:15:51.470 に答える
1

これが役立つと思います。

このように呼び出し関数を変更します

- (IBAction)myFunction:(id)sender
{
    UIButton *button = (UIButton*)sender;
    button.userInteractionEnabled = NO;
}

このように関数を呼び出します

[button addTarget:self action:@selector(myFunction:) 
            forControlEvents:UIControlEventTouchUpInside];

ビューコントローラーに戻った場合に備えて選択を保存する場合は、一度クリックされたかどうかにかかわらず、保存するブールフラグを保持する必要があります。

于 2015-06-22T05:24:33.360 に答える
1

IBOutlet をボタンに設定し、viewWillAppear メソッドで次のように記述します。

button.userInteractionEnabled = YES;

ボタンセットをクリックすると、

button.userInteractionEnabled = NO;
于 2015-06-22T05:48:43.837 に答える