一个朋友问我:我在每个cell中都添加了两个按钮(记为btnA和btnB),点击btnA时,对应的cell中添加一个子控件,再点击btnB时,对应的cell中的子控件就移除,怎么做到?
百度了一下,发现了解决办法:
首先,创建btn时,给每个btn加一个tag值
//创建cell方法-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString * iden=@"iden"; _cell=[tableView dequeueReusableCellWithIdentifier:iden]; if (_cell==nil) { _cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:iden]; } UIButton * btnA=[UIButton buttonWithType:UIButtonTypeCustom]; btnA.frame=CGRectMake(0, 0, 50, 20); btnA.tag = 1000 + indexPath.row; btnA.backgroundColor=[UIColor greenColor]; [btnA addTarget:self action:@selector(btnBClick:) forControlEvents:UIControlEventTouchUpInside]; [_cell.contentView addSubview:btnA]; UIButton * btnB=[UIButton buttonWithType:UIButtonTypeCustom]; btnB.tag = 2000 + indexPath.row; btnB.frame=CGRectMake(100, 0, 50, 20); btnB.backgroundColor=[UIColor redColor]; [btnB addTarget:self action:@selector(btnAClick:) forControlEvents:UIControlEventTouchUpInside]; [_cell.contentView addSubview:btnB]; return _cell;}
1 //添加子控件按钮代码 2 -(void)btnBClick:(UIButton *)btn 3 { 4 NSString * path=[[NSBundle mainBundle]pathForResource:@"1" ofType:@"mp4"]; 5 NSURL * url=[NSURL fileURLWithPath:path]; 6 _mp=[[MPMoviePlayerViewController alloc]initWithContentURL:url]; 7 _mp.view.backgroundColor=[UIColor purpleColor]; 8 _mp.moviePlayer.controlStyle=MPMovieControlStyleDefault; 9 10 _mp.view.frame=CGRectMake(0, 0, self.view.frame.size.width, 200);11 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:btn.tag - 1000 inSection:0];12 UITableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];// 竟然还有这个方法,第一次用13 [cell.contentView addSubview:_mp.view];14 [_tableView reloadData];15 }
1 //移除子控件按钮代码 2 -(void)btnAClick:(UIButton *)btn 3 { 4 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:btn.tag - 2000 inSection:0]; 5 UITableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath]; 6 if ([cell.contentView.subviews containsObject:_mp.view]) { 7 [_mp.view removeFromSuperview]; 8 } 9 else10 return;11 }
给添加了红色的几行代码,就搞定了!
我去,这个方法亮了,我已经被闪瞎了!
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; cell.detailTextLabel.text= [self.dateFormatter stringFromDate:self.pickerView.date];