iOS之@selector的函式傳遞多個引數

opooc發表於2018-01-17

1、一般情況,使用 self performSelector:SEL withObject:id方法

[objc] view plain copy
[self performSelectorOnMainThread:@selector(testAA:) withObject:[NSArray arrayWithObjects:@"1",@"2", nil nil] waitUntilDone:NO];  


-(void) testAA:(NSArray*)data{  

    if (data==nil||data.count!=2) {  
        return;  
    }  
    NSInteger num=[(NSString*)data[0] intValue];  
    NSInteger index=[data[1] intValue];  
}  

2、NSTimer:將傳參的物件儲存在了NSTimer的userInfo的字典中。

[objc] view plain copy
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];    
[dict setObject:oldView forKey:@"oldView"];  
[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(onTimer:) userInfo:dict repeats:NO];    
[dict release];  

- (void)onTimer:(NSTimer *)timer {    
    UIView *oldView = [[timer userInfo] objectForKey:@"oldView"];  
}  

3、UIButton類:通過設定tag來使用

[objc] view plain copy
UIButton * markButton=[[UIButton alloc] initWithFrame:CGRectMake(280, 0, 30, 30)];  
markButton.tag=@"引數值"; //這裡是你要傳遞的引數值  
[markButton addTarget:self action:@selector(addMark:)  forControlEvents:UIControlEventTouchUpInside];  

-(BOOL) addMark:(UIButton *)btn {  
    NSLog(@"%@",btn.tag];  
}  

相關文章