组合iOS视图

组合iOS视图,ios,iphone,objective-c,cocoa-touch,Ios,Iphone,Objective C,Cocoa Touch,我已经创建了一个带有注销按钮的视图,我正在尝试将其作为另一个视图的子视图。注销按钮视图有一个xib和一个与该xib关联的控制器 如何使此视图/控制器成为其他视图的一部分 我以前这样做的方法是,使用一个以编程方式绘制自身的视图,在interface builder中将该视图作为另一个视图的一部分绘制,并更改该视图的类。因为我想让视图响应方法,所以我让它有一个协议,然后让控制器成为实现它的子视图 这是唯一的办法吗?或者有没有一种方法可以让我的注销视图有一个独立的控制器,我可以直接“插入”到其他视图中

我已经创建了一个带有注销按钮的视图,我正在尝试将其作为另一个视图的子视图。注销按钮视图有一个xib和一个与该xib关联的控制器

如何使此视图/控制器成为其他视图的一部分

我以前这样做的方法是,使用一个以编程方式绘制自身的视图,在interface builder中将该视图作为另一个视图的一部分绘制,并更改该视图的类。因为我想让视图响应方法,所以我让它有一个协议,然后让控制器成为实现它的子视图


这是唯一的办法吗?或者有没有一种方法可以让我的注销视图有一个独立的控制器,我可以直接“插入”到其他视图中,因为另一种方法的缺点是,每个想要使用此子视图的视图都必须实现协议,即使该方法在每个视图中都是相同的

创建一个超类来抽象注销行为。然后,支持注销的每个UIViewController都应该为该超类创建子类。在超类中,提供注销方法

此方法将使您能够简单地将Interface Builder中的uicontrol连接到超类中的公共iAction,或者甚至在调用超类方法之前在子类中添加特定自定义

这里有一个可能的例子:

LogoutViewController.h

#import <UIKit/UIKit.h>

@interface LogoutViewController : UIViewController
-(void)performLogout;
@end
#import <UIKit/UIKit.h>
#import "LogoutViewController.h"

@interface SomeOtherViewController : LogoutViewController

@end
SomeOtherViewController.h

#import <UIKit/UIKit.h>

@interface LogoutViewController : UIViewController
-(void)performLogout;
@end
#import <UIKit/UIKit.h>
#import "LogoutViewController.h"

@interface SomeOtherViewController : LogoutViewController

@end

您可以为此使用
NSNotificationCenter
。因此,您可以在注销按钮操作时发布通知。你可以查一下电话号码


希望这有帮助。

为什么所有的UIViewController都必须知道这种注销行为?难道没有办法让我拥有一个带有注销按钮的视图,让一个控制器在那里处理所有事情,并简单地将其作为视图的一部分吗?这似乎是更面向对象的方式。我不同意这种方法更面向对象。在我提出的解决方案中,每个支持注销的UIViewController都是通过超类定义的。也就是说,如果您真的想采用您的方法,请调查UIViewController包含API。我认为这不适合这个用例,因为您的注销按钮可能控制屏幕上的完整UIView,而不仅仅是屏幕的一小部分。