Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 运行时创建的子视图如何与视图控制器通信?_Iphone_Objective C_Xcode_Messaging - Fatal编程技术网

Iphone 运行时创建的子视图如何与视图控制器通信?

Iphone 运行时创建的子视图如何与视图控制器通信?,iphone,objective-c,xcode,messaging,Iphone,Objective C,Xcode,Messaging,在我的iPhone项目中,我有一个UIViewController,我在其中添加了UIView子类的一个实例。从这个实例中,我需要将一个整数传回我的视图控制器。我当前的解决方案是将消息从我的实例发送到我的应用程序代理,该代理将消息发送到视图控制器。它能工作,但感觉有点凌乱 我是否可以直接将消息发送回视图控制器 我希望能够做一些像[超级剂量:123] 有什么想法吗 谢谢嗯,我不确定我是否正确理解了你的问题。您有一个从UIView派生的类,该类需要向从UIViewController派生的另一个类发

在我的iPhone项目中,我有一个UIViewController,我在其中添加了UIView子类的一个实例。从这个实例中,我需要将一个整数传回我的视图控制器。我当前的解决方案是将消息从我的实例发送到我的应用程序代理,该代理将消息发送到视图控制器。它能工作,但感觉有点凌乱

我是否可以直接将消息发送回视图控制器

我希望能够做一些像[超级剂量:123]

有什么想法吗


谢谢

嗯,我不确定我是否正确理解了你的问题。您有一个从UIView派生的类,该类需要向从UIViewController派生的另一个类发送消息。听起来像是以编程方式创建UIView实例。是否有任何原因使您无法在UIView上拥有一个指向UIVIewController的属性,并使用该属性直接向其发送消息

无法使用[super…],因为UIView派生类的super将是UIView


或者我没有理解这个问题:-)嗯,我不确定我是否正确理解了你的问题。您有一个从UIView派生的类,该类需要向从UIViewController派生的另一个类发送消息。听起来像是以编程方式创建UIView实例。是否有任何原因使您无法在UIView上拥有一个指向UIVIewController的属性,并使用该属性直接向其发送消息

无法使用[super…],因为UIView派生类的super将是UIView


或者我没有理解这个问题:-)

只需在UIView子类中添加一个出口,将其连接到Interface Builder中的视图控制器,并在此基础上调用您的方法。这可能看起来是这样的:

MyUIView.h:

@interface MyUIView : UIView
{
  UIViewController *viewController;
}
@property (assign) IBOutlet UIViewController *viewController;
@end
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  [[self viewController] setTitle:@"Hello from MyUIView"];
}
MyUIView.m:

@interface MyUIView : UIView
{
  UIViewController *viewController;
}
@property (assign) IBOutlet UIViewController *viewController;
@end
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  [[self viewController] setTitle:@"Hello from MyUIView"];
}

只需向UIView子类添加一个出口,将其连接到Interface Builder中的视图控制器,并在该接口上调用您的方法。这可能看起来是这样的:

MyUIView.h:

@interface MyUIView : UIView
{
  UIViewController *viewController;
}
@property (assign) IBOutlet UIViewController *viewController;
@end
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  [[self viewController] setTitle:@"Hello from MyUIView"];
}
MyUIView.m:

@interface MyUIView : UIView
{
  UIViewController *viewController;
}
@property (assign) IBOutlet UIViewController *viewController;
@end
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
  [[self viewController] setTitle:@"Hello from MyUIView"];
}

如果我理解正确,您希望从UIView的子类向视图控制器发送一条消息


这意味着您的UIView子类需要有一个属性或ivar作为视图控制器。最简单的方法是将其添加为插座,并将其连接到nib文件中的视图控制器。

如果我理解正确,您希望从UIView的子类向视图控制器发送消息


这意味着您的UIView子类需要有一个属性或ivar作为视图控制器。最简单的方法是将其添加为插座,并将其连接到nib文件中的视图控制器。

通常不应通过应用程序代理。拥有类型化指针链接也不太理想

通信的最佳方式——苹果也这样做——是创建一个委托协议。创建视图控制器时,将指针作为id传递给代理。然后,在发送信息时,您会询问学员:

if ([delegate respondsToSelector(didFinishSomething:)])
{
  [delegate didFinishSomething:info_to_pass];
}
如果您想变得更加复杂,那么还可以添加一个指向调用类实例的指针。比如:

[delegate myViewController:self didFinishSomething:info_to_pass];
通过这种方式,您总是知道消息来自哪一类


如果有多个地点需要通知更改,则您将使用通知代替委派。

通常不应通过应用程序委派。拥有类型化指针链接也不太理想

通信的最佳方式——苹果也这样做——是创建一个委托协议。创建视图控制器时,将指针作为id传递给代理。然后,在发送信息时,您会询问学员:

if ([delegate respondsToSelector(didFinishSomething:)])
{
  [delegate didFinishSomething:info_to_pass];
}
如果您想变得更加复杂,那么还可以添加一个指向调用类实例的指针。比如:

[delegate myViewController:self didFinishSomething:info_to_pass];
通过这种方式,您总是知道消息来自哪一类


如果有多个地点需要通知更改,则您将使用通知代替委派。

这是NSNotificationCenter提供的服务。一旦您能够方便地发送和接收通知,您的消息传递就会简单得多

人们面临的一个经典问题是如何获得指向他们想要的对象的指针,以便告诉它一些事情。例如,我如何告诉ViewController备份UINavigationController堆栈的两个插槽用户刚刚更改了此数据字段?因此,您深入到堆栈中,通过堆栈中一些神奇数量的元素进行补偿,在您想要与之对话的字段上构建公共setter。。。它超级笨重


与在一个地方注册为通知接收者,然后在数据更改时在另一个地方触发通知相比。在完成了所有的“挖掘视图层次结构”工作之后,这有点不可思议。

这就是NSNotificationCenter提供的东西。一旦您能够方便地发送和接收通知,您的消息传递就会简单得多

人们面临的一个经典问题是如何获得指向他们想要的对象的指针,以便告诉它一些事情。例如,我如何告诉ViewController备份UINavigationController堆栈的两个插槽用户刚刚更改了此数据字段?因此,您深入到堆栈中,通过堆栈中一些神奇数量的元素进行补偿,在您想要与之对话的字段上构建公共setter。。。它超级笨重

与在一个地方注册为通知接收者,然后在数据更改时在另一个地方触发通知相比。在完成了所有的“挖掘视图层次结构”工作之后,这有点不可思议

在我的iPhone项目中,我有一个 UIViewController,其中