如何让几个按钮全部转到同一个视图控制器?

时间:2012-09-04 06:11:19

标签: iphone ios ios5 storyboard

我是iOS和故事板的新手,我需要一些关于设计新应用程序架构的可能方法的建议。我将在数据库中保存一些数据,我将有一个UIViewController页面,其中只有一些按钮,这些按钮具有某些类别的名称。当我们点击“全部”或点击“商家”时,它会根据该类别将数据显示到UITableViewController。

现在我对一部分感到困惑:

  1. 在故事板中是否允许从不同的按钮创建多个segue到同一个ViewController类?因此,如果不允许这样做,我是否必须创建6个不同的UITableViewController类来为6个类别创建segue?

  2. 如果允许从多个按钮到单个UIViewController进行segue,我如何在storyboard中发送一个参数,让它意识到我点击了一个特定按钮转到UIViewController。

  3. 我应该在UITableViewController中创建一个带有参数的自定义构造函数,我将从其他按钮单击方法初始化该构造函数吗?那么它在类别方面显示结果?或者说故事板是否更容易实现这一目标?

2 个答案:

答案 0 :(得分:8)

  1. 当然,你可以这样做。

  2. 创建所有按钮后,从每个按钮控制拖动到下一个视图控制器并创建(例如)“推”segue。接下来,单击segue图形以选择segue。切换到属性检查器并为segue提供标识符,例如“全部”或“业务”。您可以在-prepareForSegue:方法中查看segue的标识符,以确定哪个segue导致转换,从而显示哪个类别。

  3. 但是,我不建议采用这种方法。没有必要创建六个所有完全相同的segue。我会使用一个触发单个segue的动作:

    • 将每个按钮的tag属性设置为唯一值,以便区分按钮。

    • 向您的第一个视图控制器(管理按钮的控制器)添加一个操作方法,其名称类似于-(IBAction)switchToCategoryFromButton:(id)sender

    • 将所有按钮连接到该单个操作。

    • 实施操作,使其查看sender.tag以确定按下了哪个按钮,使用该按钮确定要加载的类别,然后触发一个 segue下一个视图控制器以编程方式。

    由一个动作触发的单个segue似乎比许多segue更整洁。执行此操作的代码可能如下所示:

    - (IBAction)switchToCategory:(UIControl*)sender
    {
        // map the tapped button to a category
        switch (sender.tag) {
            case kAllButton: {
                self.category = kAllCategories;
                break;
            }
            case kBusinessButton: {
                self.category = kBusinessCategory;
                break;
            }
            default: {
                self.category = kAllCategories;
                break;
            }
        }
    
        // start the segue
        [self performSegueWithIdentifier:kCategorySegue sender:self];
    }
    
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        // tell the destination view controller what category to display
        if ([segue.identifier isEqualToString:kCategorySegue]) {
            [(NextViewController*)segue.destinationViewController setCategory:self.category];
        }
    }
    

答案 1 :(得分:1)

使用
self.performSegueWithIdentifier(“yourViewSegue”,发件人:发件人)在您的活动下处理按钮的点击:

   @IBAction func redButtonClicked(sender: AnyObject) {
        self.performSegueWithIdentifier("redView", sender: sender)
    }

redView是segue标识符。

您可以使用相同的功能进行按钮事件处理&可以通过为按钮触摸分配不同的标签来区分按钮触摸。