2015-11-08 2 views
0

В следующем коде я определяю функцию, которая создает стрелки (как изображения) и добавляет эти стрелки в представление. Однако, я получил предупреждение, которое говорит Undeclared selector 'method'. Может ли кто-нибудь предложить другой способ избежать такого предупреждения?Передача параметра String в действие UITapGestureRecognizer

-(void)createArrow:(NSString*)direction View:(UIView*)view 
{ 
    int x,y; 
    NSString *img; 
    NSString *method; 

    if ([direction isEqualToString:@"up"]){ 
     x = 55; 
     y = 6; 
     _arrow = _arrowUp; 
     method = @"upTap"; 
     img = @"up-arrow.png"; 
    }else if ([direction isEqualToString:@"down"]){ 
     x = 55; 
     y = 70; 
     _arrow = _arrowDown; 
     method = @"downTap"; 
     img = @"down-arrow.png"; 
    }else if ([direction isEqualToString:@"left"]){ 
     x = 22; 
     y = 39; 
     _arrow = _arrowLeft; 
     method = @"leftTap"; 
     img = @"left-arrow.png"; 
    }else if ([direction isEqualToString:@"right"]){ 
     x = 90; 
     y = 39; 
     _arrow = _arrowRight; 
     method = @"rightTap"; 
     img = @"right-arrow.png"; 
    } 

    _arrow = [[UIImageView alloc] initWithFrame: CGRectMake(x, y, 27, 27)]; 
    [_arrow setImage:[UIImage imageNamed:img]]; 
    UITapGestureRecognizer *gest = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(method)]; 
    [_arrow setUserInteractionEnabled:YES]; 
    [_arrow addGestureRecognizer:gest]; 
    [view addSubview:_arrow]; 
} 

ответ

1

Avi верен. Но еще более просто, почему бы вам просто не сделать method типа SEL, и в каждом случае установить его непосредственно на селектор, который вы хотите запустить, а затем просто передать селектор распознавателю жестов? Например:

int x,y; 
NSString *img; 
SEL method; 

if ([direction isEqualToString:@"up"]){ 
    ... 
    method = @selector(upTap); 
    ... 
} else if ([direction isEqualToString:@"down"]){ 
    ... 
    method = @selector(downTap); 
    ... 
} else if ([direction isEqualToString:@"left"]){ 
    ... 
    method = @selector(leftTap); 
    ... 
} else if ([direction isEqualToString:@"right"]){ 
    ... 
    method = @selector(rightTap); 
    ... 
} 

... 
UITapGestureRecognizer *gest = [[UITapGestureRecognizer alloc] initWithTarget:self action:method]; 
... 
1

Названия селекторов указаны как строки C, а не NSStrings. Либо изменение method должно быть char * и опустить ведущее @, либо использовать NSSelectorFromString(method).

Другой вариант - объявить method как тип SEL и назначить его непосредственно в каждом блоке вашего оператора if.

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