2

我想在从 classA 调用的 classB 中创建一个 UIView,以显示在 MainView(我的 UIViewController)上。

插图

谁能帮我修复我的代码?

A类:

+ (void)trigger
{
    [classB viewOn:[MainView new]];
}

B类:

+ (void)viewOn:(id)sender
{
    MainView *pointer = (MainView *)sender;

    classB *view = [[classB alloc] initWithFrame:CGRectMake(380, 200, 100, 50)];
    view.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.5f];
    view.userInteractionEnabled = YES;

    UILabel *lab = [UILabel new];
    lab.frame = CGRectMake(0, 0, 100, 50);
    lab.text = @"test";

    [view addSubview:lab];
    [pointer.view addSubview:view];
}

当我使用 MainView 类通过 [classB viewOn:self] 调用 classB 时,它工作正常。但是如果我想从classA触发它,我该怎么办?

4

2 回答 2

1

当我使用 MainView 类通过 [classB viewOn:self] 调用 classB 时,它工作正常。

那是因为你正在投射senderMainView *.

但是如果我想从classA触发它,我该怎么办?

如果你想从 ClassA 做同样的事情,你需要一个指向 MainView 实例的指针才能传入。我看到你已经在尝试这样做了......

[classB viewOn:[MainView new]];

这可能不是初始化 MainView 的正确方法,尽管......视图通常用alloc后跟initWithFrame:.

在你花太多时间试图让这一切正常工作之前,你应该考虑一下你的对象在这里扮演的不同角色。通常,您会使用视图控制器来管理视图层次结构的创建和配置。视图控制器在这里有用的一种方法是保留对 MainView 实例的引用。然后,您的视图控制器可以实例化 ClassB 并将该新视图添加到 MainView。您似乎正试图让您的 ClassA 作为视图控制器和视图工作——这可能只会使事情变得混乱,并使您更难以学习在 Objective-C 和 Cocoa Touch 中有效工作。

于 2012-09-18T14:17:52.910 回答
0

使用委托。这很简单。你所要做的就是去ClassA。让它看起来像这样

@interface ClassA: NSObject <ClassB>

现在你可以从ClassA.

希望我能有所帮助,因为我对 Objective-c 有点陌生。

于 2012-09-18T14:02:35.770 回答