一个朋友问我:我在每个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(, , , );
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(, , , );
btnB.backgroundColor=[UIColor redColor];
[btnB addTarget:self action:@selector(btnAClick:) forControlEvents:UIControlEventTouchUpInside];
[_cell.contentView addSubview:btnB];
return _cell;
}
//添加子控件按钮代码
-(void)btnBClick:(UIButton *)btn
{
NSString * path=[[NSBundle mainBundle]pathForResource:@"" ofType:@"mp4"];
NSURL * url=[NSURL fileURLWithPath:path];
_mp=[[MPMoviePlayerViewController alloc]initWithContentURL:url];
_mp.view.backgroundColor=[UIColor purpleColor];
_mp.moviePlayer.controlStyle=MPMovieControlStyleDefault; _mp.view.frame=CGRectMake(, , self.view.frame.size.width, );
11 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:btn.tag - 1000 inSection:0];
12 UITableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];// 竟然还有这个方法,第一次用
13 [cell.contentView addSubview:_mp.view];
[_tableView reloadData];
}
//移除子控件按钮代码
-(void)btnAClick:(UIButton *)btn
{
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 }
else
return;
}
给添加了红色的几行代码,就搞定了!
我去,这个方法亮了,我已经被闪瞎了!
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.detailTextLabel.text= [self.dateFormatter stringFromDate:self.pickerView.date];