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