Как вызвать метод в sub UIView? - PullRequest
       2

Как вызвать метод в sub UIView?

0 голосов
/ 21 сентября 2010

У меня есть uiviewcontroller с именем MainViewController, я добавляю в него подпредставление (имя: DetailView) в событии viewdidload.Когда я нажимаю кнопку в mainviewController, я хочу вызвать метод в subview, напишите что-то.// 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

Ответы [ 3 ]

0 голосов
/ 21 сентября 2010

Не знаете, в чем проблема, но почему бы не сохранить созданное представление в элементе? Таким образом, он будет доступен вам без необходимости повторного поиска.

0 голосов
/ 21 сентября 2010

Кажется, что вы создаете 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"];

Удачи!

0 голосов
/ 21 сентября 2010

Попробуйте [detailContainer viewWithTag:100]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...