我创建了一个带有XIB(MyXIB
)的视图,并创建了一个UIView子类(MyViewSubclass
)。我将MyViewSubclass
设置为"自定义类"对于MyXIB
的观看次数。
我已将MyXIB
中的按钮与MyViewSubclass
中的IBAction相关联。
在应用程序的主视图控制器中,我调用:
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyXIB" owner:self options:nil];
MyUIViewSubclass *myView = [subviewArray objectAtIndex:0];
[self.view addSubview:myView];
这可以在现有的View Controller之上添加新视图,但每当我点击MyXIB
中的按钮时,应用程序崩溃并表示它是sending an unrecognized selector
到父视图控制器。
如何让MyXIB
上的按钮调用MyViewSubclass
中的IBAction?
答案 0 :(得分:0)
如果您要在其他视图控制器中使用该视图,则应创建delegate protocol
,如下所示:
MyXIB.h
#import <UIKit/UIKit.h>
@protocol MyXIBDelegate <NSObject>
@required // if it's not necessary, you can use @optional
- (void)myXIBDelegateMethod;
@end
@interface MyXIB : UIView
@property (weak, nonatomic) id<MyXIBDelegate> delegate;
@end
MyXIB.m
#import "MyXIB.h"
@implementation MyXIB
- (IBAction)buttonAction:(id)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(myXIBDelegateMethod)]) {
[self.delegate myXIBDelegateMethod];
}
}
@end
由于你的UIButton的动作在MyXIB
视图中被链接,当按下按钮时,你检查是否设置了delegate
属性以及它是否响应了你的委托方法然后你调用你的协议的方法
在.m
部分的视图控制器@implementation
文件中,您将获得以下内容:
#import "ViewController.h"
#import "MyXIB.h"
@interface ViewController () <MyXIBDelegate>
@end
由于协议方法是@required
,您必须在视图控制器中实现该方法:
#pragma mark - MyXIB Delegate Method
- (void)myXIBDelegateMethod {
// your implementation
}