我有一个名为MainViewController的uiviewcontroller, 我在viewdidload事件中添加了一个子视图(名称:DetailView)。 当我按下mainviewController中的a按钮时,我想调用子视图中的方法writeSomething。 // DetailView是UIView的子类。
Mainviewcontroller中的:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"DetailView" owner:self options:nil];
UIView *aView= [nibViews objectAtIndex:0];
aView.tag=100;
self.detailView=aView;
[detailContainer addSubview:self.detailView];
}
-(void) writeAnythingInSubViewsLabel{
//i tried to reach detail UIView
NSArray* subviews = [NSArray arrayWithArray: detailContainer.subviews];
for (UIView *xView in subviews) {
if ([xView isKindOfClass:[UIView class]] && xView.tag==100) {
NSLog(@"%@", xView);
[xView writeSomething:@"hello"];
break;
}
}
}
在DetailView中:
-(void) writeSomething:(NSString *)anyText{
NSLog(@"%@", anyText);
}
但它给出了错误;
[UIView writeSomething]:无法识别的选择器发送到实例....
它在构建之前也会发出警告,UIView可能不会回复writeSomething ......
我知道UIView和DetailView不匹配。这就是为什么它会发出警告。
我也试过for (DetailView *xView in subviews) {
但它永远不会在循环中找到标记。
我希望有人帮助我...... 编辑: DetailView.m
#import "DetailView.h"
@implementation DetailView
@synthesize image, button, label;
@synthesize delegate;
- (void)dealloc {
[image release];
[button release];
[label release];
[super dealloc];
}
- (id) initWithCoder: (NSCoder *) decoder {
return self;
}
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
}
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
-(IBAction) backButtonPressed:(id) sender{
[delegate hideDetailView];
}
-(void) writeSomething:(NSString *)anyText{
NSLog(@"%@", anyText);
}
@end
答案 0 :(得分:0)
尝试[detailContainer viewWithTag:100]
答案 1 :(得分:0)
不确定问题是什么,但为什么不将创建的视图保存在成员中? 通过这种方式,您无需重新搜索即可访问它。
答案 2 :(得分:0)
您似乎正在创建一个UIView而不是DetailView。
因此,它没有找到你在DetailView中创建的方法,因为它认为xView实际上是一个UIView - 它没有writeSomething方法。
您应该返回标题,导入DetailView.h文件,并确保detailView实际上是DetailView类型的对象,而不是UIView。
在viewDidLoad中,而不是
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"DetailView" owner:self options:nil];
UIView *aView= [nibViews objectAtIndex:0];
aView.tag=100;
self.detailView=aView;
尝试使用:
self.detailView = [[DetailView alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
然后,您可以简单地使用:
而不是.m文件中的循环等[self.detailView writeSomething:@"words"];
祝你好运!