代码之家  ›  专栏  ›  技术社区  ›  Jonny

Objective-C中的ActionScript样式事件?

  •  0
  • Jonny  · 技术社区  · 14 年前

    我是一个新来做Objective-C的人,来自于flex/actionscript开发。

    我有一个iPhone应用程序,它有一个uiapplicationdelegate一致的委托,叫做myappdelegate,它有一个uiwindow。

    我不想直接在窗口中添加按钮、标签和其他内容,我想我应该为我想要创建的每个屏幕创建一个uiviewcontroller子类。当该屏幕显示时,我将相应的控制器视图作为子视图添加到窗口中。当显示另一个屏幕时,我应该从窗口中弹出任何其他视图并添加新视图。希望到目前为止一切都正确…

    我的意图是让每个视图控制器只知道它自己的东西,所以假设我想从视图B调用视图A,在ActionScript中,我会在触发事件时添加一个按钮,该事件会被视图A所拥有的对象捕获(可能是应用程序),它可以采取适当的操作(删除视图A,实例化视图B并显示它)。

    如何在Objective-C中执行此操作?

    2 回复  |  直到 14 年前
        1
  •  1
  •   drawnonward    14 年前

    uicontrol(如uibutton)可以注册任意数量的事件侦听器:

    - (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
    

    目标是要接收方法的视图控制器,而操作是要调用的方法。对于按钮,事件通常只是 UIControlEventTouchUpInside . 如果目标为零,则事件将向上传递响应程序链,直到响应程序执行该操作。如果你通过 @selector(buttonClicked:) 那么目标应该有这样的方法:

    -(IBAction) buttonClicked:(id)sender;
    

    发件人将是单击的按钮。IBaction等效于void返回类型。如果您希望在Interface Builder中绑定该操作而不是通过编程来执行,则可以在Interface Builder中绑定该操作。

    当另一个屏幕 显示,我应该弹出任何其他 从窗口查看并添加新的 查看。

    这基本上是正确的,但通常使用类似 UINavigationController 管理视图控制器。即使您不使用元控制器可能存在的UI,也可以方便地为您管理视图切换。

        2
  •  1
  •   Sam Dolan    14 年前

    如果您来自ActionScript,您可能会对 PureMVC framwork for objective C . 使用pureMVC,您将为应用程序交互创建中介、命令和模型的组合。

    使用pureMVC,您可以使用 facade 你在调解人中定义了听众来回应这些问题。这与ActionScript中使用的事件模型非常接近。(在我上一份工作中,我们在 UIResponder 为了去除做这件事的一些障碍)。如果您正在创建一个相当大的应用程序,那么我建议您看一下;它确实帮助我们管理所有的事情。

    如果不想拉入第三方库,那么应该在 MyAppDelegate 并使用 [UIApplication sharedApplication] 用于访问全局共享实例的类方法。