Objective c 目标C视图与控制器通信

Objective c 目标C视图与控制器通信,objective-c,model-view-controller,Objective C,Model View Controller,在视图中接受用户输入并将其传输到该视图的控制器的正确方式是什么?我知道NotificationCenter是一种选择,但肯定有一种更优雅的方式将数据从视图传输到其控制器 非常感谢您的帮助,我始终接受您的回答 通过子类化UIControl使用代理协议设计模式,或目标操作。想象一下,ui按钮如何告诉视图控制器它已被按下。在interface builder中,您将一个操作(一个类似于touchUpInside:的选择器)连接到一个目标(拥有它的视图控制器)。在非IB中,您可以直接告诉ui按钮要使用的

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


非常感谢您的帮助,我始终接受您的回答

通过子类化
UIControl
使用代理协议设计模式,或目标操作。想象一下,
ui按钮
如何告诉视图控制器它已被按下。在interface builder中,您将一个操作(一个类似于
touchUpInside:
的选择器)连接到一个目标(拥有它的视图控制器)。在非IB中,您可以直接告诉
ui按钮
要使用的选择器和目标

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

对于按钮来说,使用目标操作更有意义,因为实际上只有一个事件以不同的形式表示


对于滑动、拖动和其他手势,请使用
uigestureRecognitizer
s.

使用代理协议设计模式,或通过子类化
UIControl
实现目标动作。想象一下,
ui按钮
如何告诉视图控制器它已被按下。在interface builder中,您将一个操作(一个类似于
touchUpInside:
的选择器)连接到一个目标(拥有它的视图控制器)。在非IB中,您可以直接告诉
ui按钮
要使用的选择器和目标

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

对于按钮来说,使用目标操作更有意义,因为实际上只有一个事件以不同的形式表示


对于滑动、拖动和其他手势,请使用您要查找的
UIgestureRecognitizer
s.

,其中控制器将自己设置为视图的代理。您可以从UITableViewDelegate中了解它。

您正在查找的控制器将自己设置为视图的委托。您可以从UITableViewDelegate中了解它。

您正在寻找
委派
数据源
。你可以在这里看到更多的信息

这方面的一个简单例子如下:

  //MyViewSubclass.h

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

  @interface MyViewSubclass {

     id<MyViewSubclassDelegate>delegate;
  }
  @property(nonatomic,assign)id<MyViewSubclassDelegate>delegate;
MyViewController.
@实现中,实现
-(void)didTouchView
myviewssubclassdelegate
方法

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

myViewSubclass.delegate = self // Self being MyViewController.
在您的
MyViewSubclass
中,当您准备转发任何信息,或者只想启动一个方法时,您可以执行
[self.delegate didTouchView]


希望这有帮助

您正在寻找
委托
数据源
。你可以在这里看到更多的信息

这方面的一个简单例子如下:

  //MyViewSubclass.h

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

  @interface MyViewSubclass {

     id<MyViewSubclassDelegate>delegate;
  }
  @property(nonatomic,assign)id<MyViewSubclassDelegate>delegate;
MyViewController.
@实现中,实现
-(void)didTouchView
myviewssubclassdelegate
方法

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

myViewSubclass.delegate = self // Self being MyViewController.
在您的
MyViewSubclass
中,当您准备转发任何信息,或者只想启动一个方法时,您可以执行
[self.delegate didTouchView]


希望这有帮助

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

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

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

通常,UIKit对象(如
UITextField
)具有委托方法,您可以实现该方法来执行业务逻辑。例如,UITextField有一个名为
-textfielddendediting:
的委托方法,在用户解除键盘后调用该方法。

问题是,我希望接受用户以触摸和拖动的形式输入,而不是按钮。我是如何做到的?我只是以
ui按钮
为例。您可能希望将
UIGestureRecognitor
s添加到视图中。问题是,我希望以触摸和拖动的形式接受用户输入,而不是按钮。我是如何做到的?我只是以
ui按钮
为例。您可能希望将
uigesturecognizer
s添加到您的视图中。是的,这似乎正是我想要的。使用@protocol而不仅仅是引用self.delegate有什么好处?太好了!很高兴我能提供帮助,如果这足以解决您的问题,请勾选:)使用@protocol而不是仅引用委托的好处可以更好地控制您的委托行为。i、 e:在协议中添加@required会告诉您的代理该方法是必需的,并警告您该方法不存在。例如,
-conformsToProtocol:
检查类
是否确实是对象的
委托。@skram,这是真的吗