iOS4 - 使用switch语句来处理按钮按下

时间:2011-11-15 13:04:39

标签: iphone ios4

我正在整理我的第一个应用程序,尝试将按钮按下事件组合到一个方法调用中,并使用按钮的标记来查看已单击的按钮。但是,switch语句似乎不喜欢我尝试在其中分配视图控制器

#import "NewsViewController.h"
...
...
- (IBAction)contentPressed:(id)sender
  {
       //  check which button was pressed

       UIButton *contentBtn = (UIButton *)sender;

       switch (contentBtn.tag) 
       {  
           case 1:
               NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

               [self.navigationController pushViewController:controller animated:YES];
               [controller release];
           break;
        }
   }

它拒绝承认控制器 - 我在我正在进行分配的行上获得“使用未声明的标识符'控制器'”和“意外的接口名称NewsViewController,标识符”。

在我尝试将按钮的单独IBActions组合成一个之前,一切正常。有人对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

您不能直接在case语句中声明变量。您必须在switch语句之前声明变量NewsViewController *controller,或者用花括号括起您的完整案例。这源于这样一个事实,即case语句有一个名为fall-through的机制,其中一个不以break;结尾的案例将继续到下一个案例,这会给变量声明带来困难。如果你这样做你应该没事:

   switch (contentBtn.tag) 
   {  
       case 1:
       {
           NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

           [self.navigationController pushViewController:controller animated:YES];
           [controller release];
           break;
       }
    }

答案 1 :(得分:1)

为了在switch switch语句中声明变量,代码段必须通过用大括号括起来拥有它自己的作用域。

switch (contentBtn.tag) 
{  
    case 1:
    {
        NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

        [self.navigationController pushViewController:controller animated:YES];
        [controller release];
    }
    break;
}