1

我有一个名为 FirstController 的 ViewController,它有 3 个按钮,每次触摸其中一个按钮时,它都会打开 SecondController(我的另一个 ViewController)。但即使所有三个按钮都打开同一个 ViewController,我也不希望 ViewController 完全相同,但它会有不同的对象,具体取决于按下的按钮。我在 SecondController 中有一个 ScrollView,我想根据按下的按钮将不同的图像作为子视图添加到 ScrollView 中。

这是我到目前为止得到的:


#import "FirstController.h"
#import "SecondController.h"

@interface Level1 ()

@end

@implementation FirstController

- (IBAction) button1 {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondController *ViewForButton1 = [mainStoryboard instantiateViewControllerWithIdentifier:@"View2"];
}
- (IBAction) button2 {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondController *ViewForButton2 = [mainStoryboard instantiateViewControllerWithIdentifier:@"View2"];
}
- (IBAction) button3 {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondController *ViewForButton3 = [mainStoryboard instantiateViewControllerWithIdentifier:@"View2"];
}

@end

我知道如何将图像添加为孔视图的子视图,但我需要它位于 ScrollView 中!我现在如何为此类实现 ScrollView 并向其添加子视图?

PS:我有超过 3 个按钮,但在这个例子中我只使用了 3 个。

4

3 回答 3

0

按照您编写它的方式,您的 mainStoryboard 对象都已实例化,并且仅在创建它们的各个方法内具有范围。您的 ViewForButton_ 对象也是如此。他们有不同的名字这一事实是无关紧要的。

这使得它们,仅凭这一事实,就成为彼此不同的对象。它们可以有自己的内部状态,该状态不同于同一类的任何其他对象。

更新

在每个按钮方法中试试这个:

- (IBAction) button1 {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondController *ViewForButton1 = [mainStoryboard instantiateViewControllerWithIdentifier:@"View2"];
... create views to add to the second view controller here
... add he views that you created to the second view controller

}

在某些时候,我猜您想显示与第二个视图控制器关联的视图。我将把它留给你,但我假设你会用同样的方法做到这一点。

顺便说一句,这与 AppDelegate 本身没有任何关系。

于 2013-01-26T17:02:32.073 回答
0

当点击按钮时给Tag每个UIButton并获取标签,并将此标签传递给YourSecondViewController您要根据点击的按钮显示的图像的放置条件。

于 2013-01-26T16:58:17.493 回答
0

我会建议以不同的方式来做到这一点。在您的滚动视图中放置不同的视图应该在 SecondController 的 viewDidLoad 方法中完成。要将项目添加到滚动视图,您需要一个 IBOutlet 到该滚动视图,并且在您第一次从 FirstController 实例化控制器时尚未设置。因此,我将只有一个按钮方法,并使用它来实例化 SecondController,并在其中设置一个属性(在我的示例中称为 buttonTag),该属性取决于按下的按钮的标记。

-(IBAction)goToSecondController:(UIButton *)sender {
    SecondController *second = [self.storyboard instantiateViewControllerWithIdentifier:@"Next"];
    second.buttonTag = sender.tag;
    [self.navigationController pushViewController:second animated:YES];
}

然后在 SecondController 中,在 switch 语句中使用该属性来添加你想要的东西:

- (void)viewDidLoad {
    [super viewDidLoad];

    switch (self.buttonTag) {
        case 1:
            [self.scrollView addsubview:someView];
            break;
        case 2:
            [self.scrollView addsubview:someOtherView];
            break;
        case 3:
            [self.scrollView addsubview:anotherView];
            break;
        default:
            break;
    }
}
于 2013-01-26T17:48:09.603 回答