2015-08-23 1 views
0

коды являются следующие:Почему пользовательский класс не смог успешно вызвать собственный метод класса? IOS

В myViewController.m файл:

A.This один может работать (метод экземпляра)

-(UIButton *)createButton:(SEL)action addedto:(UIView *)fatherView 
{ 
    UIButton *btn = [[UIButton alloc] initWithFrame:frame]; 

    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 

    [fatherView addSubview:btn]; 
    return btn; 
} 

-(void)startBtnDidClicked:(UIButton *)startBtn 
{ 
    NSLog(@"start!"); 
} 

-(void)viewDidLoad 
{ 
    self.startBtn = [self createButton:@selector(startBtnDidClicked:) addedto:self.parentViewController.view ]; 
} 

B.But это один не удалось работать (метод класса): [ошибка: при запуске «startBtnDidClicked:» отображается ошибка: «нераспознанный селектор, отправленный на xxxx «]

+ (UIButton *)createButton:(SEL)action addedto:(UIView *)fatherView 
{ 
    UIButton *btn = [[UIButton alloc] initWithFrame:frame]; 

    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 

    [fatherView addSubview:btn]; 
    return btn; 
} 

-(void)startBtnDidClicked:(UIButton *)startBtn 
{ 
    NSLog(@"start!"); 
} 

-(void)viewDidLoad 
{ 
    self.startBtn = [[self class] createButton:@selector(startBtnDidClicked:) addedto:self.parentViewController.view ]; 
} 

ответ

1

В методе класса createButton:added: (в вашей 2-й бит кода) self является ссылкой на класс, не экземпляр класса. Таким образом, ваша кнопка ищет метод класса с именем startBtnDidClicked:, а не метод экземпляра с именем startBtnDidClicked:.

Если вы хотите использовать метод класса для создания кнопки, вам нужно добавить еще один параметр для цели, вместо того, чтобы принимать self.

+ (UIButton *)createButton:(id)target action:(SEL)action addedto:(UIView *)fatherView 
{ 
    UIButton *btn = [[UIButton alloc] initWithFrame:frame]; 

    [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 

    [fatherView addSubview:btn]; 
    return btn; 
} 

-(void)startBtnDidClicked:(UIButton *)startBtn 
{ 
    NSLog(@"start!"); 
} 

-(void)viewDidLoad 
{ 
    self.startBtn = [[self class] createButton:self action:@selector(startBtnDidClicked:) addedto:self.parentViewController.view ]; 
} 
+0

Это может сработать! Большое спасибо !!! – tan

 Смежные вопросы

  • Нет связанных вопросов^_^