【问题标题】:How to have several buttons all segue to the same view controller?如何让几个按钮都连接到同一个视图控制器?
【发布时间】:2012-08-28 18:32:14
【问题描述】:
我是 iOS 和故事板的新手,我需要一些关于设计新应用架构的可能方法的建议。我将在数据库中保存一些数据,我将有一个 UIViewController 页面,其中只有一些按钮,这些按钮具有某些类别的名称。当假设单击“全部”或单击“业务”时,它将根据该类别将数据显示获取到 UITableViewController。
现在我在一方面感到困惑:
在故事板中是否允许从不同按钮到同一个 ViewController 类创建多个 segue?因此,如果不允许这样做,我是否必须创建 6 个不同的 UITableViewController 类来为 6 个类别制作 segues?
如果允许从多个按钮到单个 UIViewController 进行转场,我如何在情节提要中发送参数以使其意识到我单击了特定按钮以转到 UIViewController。
我应该在 UITableViewController 中创建一个带有参数的自定义构造函数,然后我将从其他按钮单击方法初始化该构造函数吗?以便它按类别显示结果?或者有没有办法让故事板更容易做到这一点?
【问题讨论】:
标签:
iphone
ios
ios5
storyboard
【解决方案1】:
当然可以。
创建所有按钮后,从每个按钮控制拖动到下一个视图控制器并创建(例如)一个“推”segue。接下来,单击 segue 图形以选择 segue。切换到属性检查器并给 segue 一个标识符,如“All”或“Business”。您可以在 -prepareForSegue: 方法中查看 segue 的标识符,以确定是哪个 segue 导致了转换,从而确定要显示哪个类别。
不过,我不推荐这种方法。没有必要创建六个都做完全相同的事情的 segue。我会使用触发单个 segue 的操作:
将每个按钮的tag 属性设置为唯一值,以便区分按钮。
向您的第一个视图控制器(管理按钮的控制器)添加一个操作方法,命名为 -(IBAction)switchToCategoryFromButton:(id)sender。
将所有按钮连接到单个操作。
实现该操作,使其查看sender.tag 以确定按下了哪个按钮,使用该按钮来确定要加载的类别,然后触发 one 转到下一个以编程方式查看控制器。
由一个动作触发一个单一的转场似乎比许多转场要简洁得多。执行此操作的代码可能如下所示:
- (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];
}
}
【解决方案2】:
使用
self.performSegueWithIdentifier("yourViewSegue", sender: sender) 在您的事件下用于处理按钮的点击,例如:
@IBAction func redButtonClicked(sender: AnyObject) {
self.performSegueWithIdentifier("redView", sender: sender)
}
redView 是 segue 标识符。
您可以对按钮事件处理使用相同的功能,并且可以通过分配不同的标签来区分按钮触摸。