Ios 自定义UIView处理按钮按下

Ios 自定义UIView处理按钮按下,ios,objective-c,uiview,delegates,xib,Ios,Objective C,Uiview,Delegates,Xib,我问了一个问题,当我的自定义UIView上点击一个按钮时,我的应用程序崩溃了。我现在想知道我所做的是否正确 我的目标是创建一个可重用的自定义视图。为此,我使用iActions创建自定义UIView来处理按钮按下。这些iAction将调用委托方法。从某种意义上说,该方法传递给已创建视图的视图控制器。这意味着视图可以在任何视图控制器内创建,而视图控制器所要做的就是实现委托方法 我有一个包含设置为自定义视图类的UIView的xib文件。文件所有者也设置为我的自定义类 #import <UIKit

我问了一个问题,当我的自定义UIView上点击一个按钮时,我的应用程序崩溃了。我现在想知道我所做的是否正确

我的目标是创建一个可重用的自定义视图。为此,我使用iActions创建自定义UIView来处理按钮按下。这些iAction将调用委托方法。从某种意义上说,该方法传递给已创建视图的视图控制器。这意味着视图可以在任何视图控制器内创建,而视图控制器所要做的就是实现委托方法

我有一个包含设置为自定义视图类的UIView的xib文件。文件所有者也设置为我的自定义类

#import <UIKit/UIKit.h>

@protocol ContactUsViewDelegate <NSObject>

- (void)callPressed;
- (void)emailPressed;
- (void)displayCloseContactViewPressed;

@end

@interface ContactUsView : UIView

@property (nonatomic, weak) id <ContactUsViewDelegate> delegate;

- (IBAction)callButtonPressed:(id)sender;
- (IBAction)emailButtonPressed:(id)sender;
- (IBAction)displayCloseButtonPressed:(id)sender;

@end

这是创建可在任何视图控制器中实现的可重用视图的有效方法吗?

使用委托是UIKit类本身使用的标准方法。您可以通过使委托方法成为可选的来改进这一点。如果您这样做,您必须在发送消息之前检查它们是否已实现(通过
响应选择器:
)。感谢您的确认。
#import "ContactUsView.h"

@implementation ContactUsView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {        
        NSArray* array = [[NSBundle mainBundle] loadNibNamed:@"ContactUsView" owner:self options:nil];
        for (id object in array) {
            if ([object isKindOfClass:[ContactUsView class]])
            self = (ContactUsView *)object;
        }
    }
    return self;
}

- (IBAction)callButtonPressed:(id)sender
{
    [self.delegate callPressed:sender];
}

- (IBAction)emailButtonPressed:(id)sender
{
    [self.delegate emailPressed:sender];
}

- (IBAction)displayCloseButtonPressed:(id)sender
{
    [self.delegate displayCloseButtonPressed:sender];
}