2

内部にテーブルビューで構成されるコントローラークラスがあるアプリケーションがあります。コントローラーには、検索バーと 5 つのボタンがあります。初めてアプリケーションを実行するとき、最初のボタンを選択したままにしておきたいです。

ボタンをクリックすると、サーバーから JSON API が呼び出され、JSON から返された値に応じて、テーブルビューに表示したいと考えています。2 番目のボタンをクリックすると、同じ関数が呼び出されますが、id として異なるパラメーターが渡されます。私はコードを実行しましたが、アプリケーションを初めて実行したときに最初のボタンが選択されて表示され、API が呼び出されたときに問題が発生しましたが、次のボタンに切り替えると、テーブルビューが新しい値で更新されません。

コントローラー クラスに追加した 5 つのボタンがあります。アプリケーションを初めて実行するときは、最初のボタンを選択したままにし、そのアクションを実行して API を呼び出し、2 番目のボタンをクリックすると 2 番目のアクションが実行され、同じことがテーブルビューに反映される必要があります。特定のボタンがクリックされたときの結果について。

これは私のコードです:

- (void)viewDidLoad {
    category = [[ResultJson alloc] init];
    dealsArray = [[NSMutableArray alloc] init];
    [self.view bringSubviewToFront:btnAll];
    [btnAll setBackgroundImage:[UIImage imageNamed:@"icon-1-active.png"] forState:UIControlStateNormal];
    if ([[btnAll backgroundImageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-1-active.png"]])
    {
        [self btnAll]; 
    }
    [super viewDidLoad];

 }


-(IBAction)btnAll
{
    [self.tblView reloadData];
    NSLog(@"Done");
    [self.view bringSubviewToFront:btnAll];
    if (category.newArray)
    {
        [category.newArray release];
    }
    category.newArray = [[NSMutableArray alloc] init];
    [btnAll setUserInteractionEnabled:YES];
    [btnAll setBackgroundImage:[UIImage imageNamed:@"icon-1-active.png"] forState:UIControlStateNormal];
    [btnEntertainment setBackgroundImage:nil forState:UIControlStateNormal];
    [btnRetail setBackgroundImage:nil forState:UIControlStateNormal];
    [btnServices setBackgroundImage:nil forState:UIControlStateNormal];
    [btnFood setBackgroundImage:nil forState:UIControlStateNormal];
    [btnHealthBeauty setBackgroundImage:nil forState:UIControlStateNormal];
    [category GetDetails:1];
    [dealsArray addObjectsFromArray:category.newArray];
    btnAll.tag = 0;

}


-(IBAction)btnEntertainment
{
    [self.tblView reloadData];

    [self.view bringSubviewToFront:btnEntertainment];
    if (category.newArray)
    {
        [category.newArray release];
    }
    category.newArray = [[NSMutableArray alloc]init];
    [btnEntertainment setBackgroundImage:[UIImage imageNamed:@"icon-2-active.png"] forState:UIControlStateNormal];
    [btnAll setBackgroundImage:nil forState:UIControlStateNormal];
    [btnRetail setBackgroundImage:nil forState:UIControlStateNormal];
    [btnHealthBeauty setBackgroundImage:nil forState:UIControlStateNormal];
    [btnServices setBackgroundImage:nil forState:UIControlStateNormal];
    [btnFood setBackgroundImage:nil forState:UIControlStateNormal];

    [category GetDetails:2];


    [dealsArray addObjectsFromArray:category.newArray];
    btnEntertainment.tag = 1;

}

これは、ID をパラメーターとして渡して GetDetails API メソッドを呼び出す最初の 2 つのボタン アクションです。最初にViewDidloadで最初のbtnAllを選択済みとして設定し、そのアクションを実行していますが、問題は、2番目のボタンをクリックすると最初のボタンの結果がテーブルビューに表示され、2番目のボタンをクリックするとその結果が表示されることですテーブルビュー。

4

2 に答える 2

1

あなたがやりたいことは、あなたの質問で理解したとおりです。3つのことを教えてください。

1)[yourtablview reloadData];新しいデータでテーブルを更新する必要がある場合に追加します。

2)ボタンアクションを呼び出す前に、カテゴリに応じてすべてのボタンに異なるタグを設定します

3)IBAction次の方法を使用します。

 -(IBAction)btnEntertainment:(id)sender // here i used action name `btnEntertainment`. you can use your action name.
     {
       int buttonidentifier = [sender tag];// this will give button tag so you can identify which button clicked or tapped and call you api your according to that like below.

       if(buttonidentifier == 1)//this tag will give you button identification. For example you set tag 1 for `button1` than this is indicate that you first button is tapped or click.
         {
           // call first category api and do whatever you want do 
          }

      else if(buttonidentifier == 2)//this tag will give you button identification. For example you set tag 2 for `button2` than this is indicate that you second button is tapped or click.
         {
           // call Second category api and do whatever you want do 
          }
      }

>>加筆修正

viewdidloadでボタンを作成するときにボタンタグを設定しました。ボタンごとに別のアクションを記述する必要はありません。これと同じアクションがすべてのボタンで機能buttonidentifierし、コードに示すようにボタン tag( ) を使用して、どのボタンがタップまたはクリックされたかを識別します。

うまくいけば、これはあなたを助けるでしょう...

于 2012-05-08T06:04:57.370 に答える
0

これは、アプリケーションの最初の使用をどのようにテストしているかを確認する必要があることです。異なるユーザーに依存している場合は、次のように、いくつかの一意の ID を YE と共に NSDefaults に保存します。

[[NSDefulsts standardDefaults] setBool:YES forKey:someUserID];
[NSDefulsts standardDefaults] synchronize];

取得時に同じIDを確認します

[[NSDefulsts standardDefaults] getBoolForKey:someUserID]

ユーザーでない場合は、次のような変数

[[NSDefulsts standardDefaults] setBool:YES forKey:isFirstTime];

2番目の質問では、テーブルビューをリロードしたいときはいつでも電話してください

[tablview reloadData];

リクエストが終了するたびにこれを呼び出し、jSON の値を配列または辞書に設定します

于 2012-05-07T12:19:34.483 に答える