@selector 里面的方法名加参数

 iPhone: NSTimer and that thing called userInfo

Tuesday, May 12, 2009   
As I am implementing some stuff, I had reason to send along some information to a NSTimer's "onComplete" method. Every example online I've seen recently using NSTimer sets the userInfo property to nil. Not very useful for me to learn from. After a little banter on an email list, I understand how this thing works.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
 UILabel *cellLabel = (UILabel *)[newCell.contentView viewWithTag:1]; 
 [newCell setSelected:YES animated:YES];
 
 NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
 [myDictionary setObject:tableView forKey:@"table"];
 [myDictionary setObject:indexPath forKey:@"indexPath"];
 // The colon after the onTimer allows for the argument
 [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(onTimer:) userInfo:myDictionary repeats:NO];
 [myDictionary release];
}


So the onTimer method will get called after .5 seconds and it's being sent the userInfo object containing that NSMutableDictionary. Now to use that... 
- (void)onTimer:(NSTimer *)timer {
 NSLog(@"--- %@", [timer userInfo] );
 [[[timer userInfo] objectForKey:@"table"] deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
        // I have a reference to the tableView so I can do this below
        // but to show how the keys work, the call above these works
 //[table deselectRowAtIndexPath:[[timer userInfo] objectForKey:@"indexPath"] animated:YES];
}


Ta da. Now I see how this works, and userInfo has a type of (id) meaning it can be anything.

果然可行
[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(handleTimer:) userInfo:@"参数" repeats:YES];
用的时候只要在下面函数里调用强制转换的userinfo就行,
-(void)handleTimer:(NSTimer*)timer
{
//这里使用(NSString *)[timer userInfo]
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值