自定义UIView处理按钮按下

时间:2014-12-05 12:26:39

标签: ios objective-c uiview delegates xib

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

我的目标是创建一个可以重复使用的自定义视图。为此,我创建了带有IBActions的自定义UIView来处理按钮按下。这些IBActions将调用委托方法。在某种意义上,方法的传递按下到已创建视图的视图控制器。这意味着可以在任何视图控制器内创建视图,视图控制器必须执行的是实现委托方法。

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

#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

然后实现如下:

#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];
}

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

0 个答案:

没有答案