【问题标题】:Calling a method in a UIViewController from a UIButton in a subview从子视图中的 UIButton 调用 UIViewController 中的方法
【发布时间】:2011-05-25 03:01:00
【问题描述】:

仍在学习 Objective C 并获得正确的结构。

我有一个带有 UIViewController 的 iOS 应用程序,它有一个名为“doSomething”的已定义方法。在我的视图控制器中,我有一个视图,并且在该视图中,我以编程方式创建了一些 UIButton(请参见下面的一个按钮示例)。

现在当我按下按钮时,我想调用我的方法“doSomething”。我目前的做法是这样的:

[myButton addTarget:nil 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];

由于我的目标是 nil,它会沿着响应者链向上移动,直到找到一个名为“doSomething”的方法。它有效,但感觉不太对。

我已经开始考虑使用@protocol,但并没有真正理解它。我一直在看一些教程,但对我来说还不够清楚。我使用了类似表视图控制器的协议,但定义一个对我来说是新的。

是否有可能获得这个特定案例的示例?

谢谢!

【问题讨论】:

  • 为什么感觉不对?这就是构建响应者链的目的,而且这是正确的做法。

标签: objective-c inheritance uibutton protocols


【解决方案1】:

当您的目标传入视图控制器时,将在该对象上调用该方法。

编辑:

[myButton addTarget:controller 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];

假设您有一个名为 controller 的变量,它就是您的 UIViewController。如果您没有对控制器的引用,则只需将一个引用传递给您的视图。

编辑2:

查看界面:

@property (assign) UIViewController* controller;

查看实现:

@synthesize controller;

控制器:

- (void) viewDidLoad {
    [super viewDidLoad];
    someView.controller = self;
}

【讨论】:

  • 您能详细说明一下吗?我不确定我是否理解你。
  • 感谢 skorulis 的编辑。现在我们越来越接近了,但我想我还不够好。我想这对你来说很自然,但我不知道如何引用我的 UIViewController,我想这是这里的核心......
  • 感谢编辑 2!现在我们已经完成了;-) 我已经测试过了,它就像发条一样工作,我今天学到了一些新东西。谢谢!
【解决方案2】:

我的做法是将addTarget 的值设置为self

[myButton addTarget:self 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside]

这将在添加目标的对象上查找方法doSomething。在这种情况下,这将是视图控制器。

【讨论】:

  • 谢谢cs。我之前尝试过,我认为它会转到 UIView,而不是 UIViewController。如果我更改为 self 我会得到一个“发送到实例的无法识别的选择器”。这就是我将其更改为 nil 的原因。
  • 您能否发布您的代码,以便我更好地了解您遇到的问题?
  • 嗨 cs,我认为 skorulis 是在正确的轨道上,只是我还不够聪明,还不知道实际的代码......
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 2013-02-27
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多