【问题标题】:How to create a UIView outside UIViewController?如何在 UIViewController 之外创建 UIView?
【发布时间】:2012-09-18 13:41:34
【问题描述】:

我想在 classB 中创建一个 UIView,从 classA 调用以显示在 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触发它,我该怎么做呢?

【问题讨论】:

    标签: iphone objective-c xcode uiview uiviewcontroller


    【解决方案1】:

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

    那是因为您将 sender 转换为 MainView *

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

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

    [classB viewOn:[MainView new]];

    这可能不是初始化 MainView 的正确方法,但是……视图通常用alloc 后跟initWithFrame: 进行初始化。

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

    【讨论】:

    • 看来我高估了自己来处理这里的代码。你是对的,我真的应该重新考虑我放置类及其角色的逻辑。但是如果我尝试修复它们,我该怎么办?
    • 首先弄清楚你想要发生什么。忘记对象和类;你希望用户看到什么?阅读 Apple 的 iOS 文档中的 MVC,以便了解如何在 iOS 中使用 MVC 模式(并且它使用了很多)——这将帮助您以适合 iOS 的方式组织程序。我不能比这更具体,因为我真的不知道你想要完成什么。
    • 我的编码经验确实是从语言知识较差的阶段开始的。我尝试从Objective-C开始实现这个想法。要继续这个项目,我需要做更多的阅读。感谢您的时间和帮助,我真的很感激!
    【解决方案2】:

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

    @interface ClassA: NSObject <ClassB>
    

    现在您可以通过ClassA 拨打电话。

    希望我能提供帮助,因为我是 Objective-c 的新手。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2017-10-17
      相关资源
      最近更新 更多