2

我有一个应用程序,其中有一个控制器类,其中包含一个表视图。在控制器中,我有一个搜索栏和 5 个按钮。当我第一次运行我的应用程序时,我希望第一个按钮保持选中状态。

当单击按钮时,我正在从服务器调用 JSON api,并根据从 JSON 返回的值,我想在我的 tableview 中显示。单击第二个按钮时,将调用相同的函数,但将不同的参数作为 id 传递给它。我已经完成了代码,但是当应用程序第一次运行时出现问题,第一个按钮被选中并且它的 api 被调用但是当我切换到下一个按钮时,我的 tableview 没有用新值刷新。

我有 5 个按钮已添加到我的控制器类中。当我第一次运行我的应用程序时,我希望第一个按钮保持选中状态并执行其操作并调用 api,当单击第二个按钮时,应该执行第二个操作,依此类推,同样应该反映在 tableview 上单击特定按钮时的结果。

这是我的代码:

- (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;

}

这是我的第一个 2 按钮操作,我通过将 id 作为参数传递给 GetDetails api 方法来调用它。最初在 ViewDidload 中,我将我的第一个 btnAll 设置为选中并执行其操作,但问题是当我单击第二个按钮时,第一个按钮的结果显示在 tableview 上,第二次单击第二个按钮其结果在表视图。

4

2 回答 2

1

你想做什么,正如我在你的问题中所理解的那样。我想告诉你三件事。

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)单击,如我的代码所示。

希望对你有帮助...

于 2012-05-08T06:04:57.370 回答
0

一个你必须检查你如何测试应用程序的第一次使用,如果它依赖于不同的用户,那么在 NSDefaults 中保存他们的一些唯一 ID 以及 YE,例如

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

并在获取时间检查相同的ID

[[NSDefulsts standardDefaults] getBoolForKey:someUserID]

如果不是用户,那么任何变量都像

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

对于您的第二个问题,每当您希望重新加载 tableveiew 时,请致电

[tablview reloadData];

每次请求完成时都会调用它,并将 jSON 的值设置为某个数组或字典

于 2012-05-07T12:19:34.483 回答