将子视图添加到子视图,但是从另一个类添加

时间:2013-01-26 16:54:08

标签: ios cocoa-touch cocoa class subclass

我有一个名为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个。

3 个答案:

答案 0 :(得分:0)

为每个Tag提供UIButton并在点击按钮时获取标记,并将此标记传递给YourSecondViewController并根据按钮点击要显示哪个图像的放置条件。

答案 1 :(得分: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本身有任何关系。

答案 2 :(得分: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;
    }
}