0

メソッド内にNSTimer遅延を挿入したいのですが、これを行う方法を考えていました。遅延タイマーを置きたいところを太字にしました。

これまでの私のコードは次のとおりです。

- (void) buttonPressed:(UIButton*) sender {

for(int i = 0;i < [categoryBtnImages count]; i++)
{
    UIButton *but = (UIButton *)[catButtonArray objectAtIndex:i];
    if(but != sender)
    {
        [but setImage:[UIImage imageNamed:[categoryBtnImages objectAtIndex:i]] forState:UIControlStateNormal];
       // but.selected = !but.selected;

    }
}

buttonCat = (UIButton *)sender;
int tagOfButton = buttonCat.tag - 2;

if (tagOfButton == -2 ){
    tagOfButton = 8;
}
[buttonCat setImage:[UIImage imageNamed:[categoryBtnImagesSel objectAtIndex:tagOfButton]] forState:UIControlStateNormal];

ここに遅延を入れて、残りのコードを実行したいと思いますが、すべてこのメソッド内からです。

if ([sender.titleLabel.text isEqualToString:@"Button 0"]) {
    [self foodCatSort:nil];
    [self.tableView reloadData];


}
if ([sender.titleLabel.text isEqualToString:@"Button 1"]) {
    [self healthCatSort:nil];
    [self.tableView reloadData];

}
if ([sender.titleLabel.text isEqualToString:@"Button 2"]) {
    [self shoppingCatSort:nil];
    [self.tableView reloadData];

}

}

参考までに、これを実行したいのは、テーブルをリロードするボタンが押され、ボタンの状態の画像が変化するためです。最初にuibuttonイメージの変更を確認してから、テーブルをリロードしてください。私は遅れがこれを解決するだろうと思っていました。

4

2 に答える 2

1

遅延が必要な場合は、は必要ありませんNSTimer

performselector: withObject: afterDelay:代わりに使用してください。

このようなもの:

  [self performSelector:@selector(yourDelayedMethod) withObject:nil afterDelay:2];
于 2013-02-18T16:50:58.837 に答える
1

両方の半分が同じメソッドの一部であると主張している理由は、ローカル変数へのアクセスのためだと思います。これは実際には可能ですが、NSTimer. 元のメソッドと同じスコープ内で完全に遅延させたいコードを保持するには、次を使用できますdispatch_after()

[buttonCat setImage:[UIImage imageNamed:[categoryBtnImagesSel objectAtIndex:tagOfButton]] forState:UIControlStateNormal];

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.75 * NSEC_PER_SEC));
dispatch_after(delay, dispatch_get_main_queue(), ^(void){

    if ([sender.titleLabel.text isEqualToString:@"Button 0"]) {
        [self foodCatSort:nil];
        [self.tableView reloadData];
    }
    if ([sender.titleLabel.text isEqualToString:@"Button 1"]) {
        [self healthCatSort:nil];
        [self.tableView reloadData];

    }
    if ([sender.titleLabel.text isEqualToString:@"Button 2"]) {
        [self shoppingCatSort:nil];
        [self.tableView reloadData];

    }
});

UI 効果間の任意のタイミングの遅延は、ユーザーにとって厄介に見える可能性があるため、おそらくこれにある種のアニメーションを使用することも検討する必要があります。

于 2013-02-18T17:44:24.230 に答える