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