0

在视图中接受用户输入然后将其传输到该视图的控制器的正确方法是什么?我知道 NotificationCenter 是一种选择,但肯定有一种更优雅的方式可以将数据从视图传输到其控制器吗?

非常感谢所有帮助,我总是接受答案!

4

5 回答 5

2

使用委托协议设计模式,或通过子类化目标操作UIControl。想想 a 如何UIButton告诉视图控制器它已被按下。在界面构建器中,您连接一个动作 - 一个类似于touchUpInside:目标的选择器 - 拥有它的视图控制器。在非 IB 中,您直接告诉使用UIButton什么选择器和使用什么目标。

这两种方法在不同的情况下都有意义。例如UITextField,使用委托更有意义,因为文本字段可以向您发送任意数量的事件,例如用户开始编辑、结束编辑或键入字符时的事件。

对于按钮,使用 target-action 更有意义,因为实际上只有一个事件以不同的形式表示。

对于滑动和拖动以及其他手势,请使用UIGestureRecognizers。

于 2012-06-07T23:21:22.947 回答
1

您正在寻找委托,其中控制器将自身设置为视图的委托。你从 UITableViewDelegate 就知道了。

于 2012-06-07T23:21:36.020 回答
1

您正在寻找DelegationData Source. 您可以在此处查看有关此的更多信息,委托和数据源

一个简短的例子是,类似于以下内容:

  //MyViewSubclass.h

  @protocol MyViewSubclassDelegate
  //Implement your delegate methods here.
  -(void)didTouchView; 
  @end

  @interface MyViewSubclass {

     id<MyViewSubclassDelegate>delegate;
  }
  @property(nonatomic,assign)id<MyViewSubclassDelegate>delegate;

当然,@synthesizedelegateMyViewSubclass.m

现在在类的标题中,您希望MyViewSubclass代理成为,您需要遵守 `MyViewSubclassDelegate 协议。

 #import "MyViewSubclass.h"
 @interface MyViewController : UIViewController <MyViewSubclassDelegate>

在你@implementation的 中MyViewController.,实现 的MyViewSubclassDelegate方法-(void)didTouchView

初始化和创建MyViewSubclass对象时,您设置MyViewController为委托:

myViewSubclass.delegate = self // Self being MyViewController.

在你的MyViewSubclass, 当你准备好转发任何信息,或者只是想触发你会做的方法时[self.delegate didTouchView]

希望这可以帮助 !

于 2012-06-07T23:24:11.347 回答
0

使您的视图成为UIControl目标/动作设计模式的子类并实现 - 使用该 sendActionsForControlEvents:方法向控制器发送消息。

于 2012-06-07T23:24:47.707 回答
0

UIKit 对象通常UITextField具有委托方法,您可以实现这些方法来执行业务逻辑。例如,UITextField 有一个委托方法- textFieldDidEndEditing:,它在用户关闭键盘后被调用。

于 2012-06-07T23:25:19.177 回答