这就是结构的样子。
--- UIView
---- ScrollView
--- TableView
UIView *topView = [[UIView alloc]initWithFrame:CGRectMake(0, -250, 320, 250)];
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 70, 320, 150) style:UITableViewStylePlain];
tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor blackColor];
tableView.separatorStyle = normal;
[tableView reloadData];
[topView addSubview:tableView];
[self.scrollView addSubview:topView];
在tableview中,我正在使用一个带有按钮的自定义tableview单元格。这是我的CellForRowAtIndex
中按钮的代码[cell.btnDelete addTarget:self action:@selector(deleteAppointment:) forControlEvents:UIControlEventTouchUpInside];
现在要获取特定行,我在deleteAppointment
中执行此操作 UIButton *button = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)button.superview;
UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
NSLog(@"row: %d",indexPath.row);
但它仍然会出现以下错误。
-[ExceptionCell indexPathForCell:]: unrecognized selector sent to instance 0x210a2fa0
任何人都可以帮助我吗?
答案 0 :(得分:6)
非常简单,在cellForRowAtIndexPath
。只需标记您的按钮
cell.button.tag = indexPath.row;
在按钮@selector方法
中删除数组或字典(即你的dataSource)中的值[array removeObjectAtIndex:button.tag];
现在重新加载tableView。
[tableView reloadData];
答案 1 :(得分:0)
错误显示您正试图在indexPathForCell
上致电ExceptionCell
。 indexPathForCell
是UITableView
上的方法,而不是UITableViewCell
。
cell.superview
未按预期返回UITableView
。
答案 2 :(得分:0)
从TableView中删除行时,您想要的是保持直观动画提供方法DeleteRowsAtIndexPath,我遇到了这个问题,并最终找到了一个简单的解决方案。
问题是,我们正在使用自定义单元格和自定义UIButton来删除单元格
所以,你必须使用委托// CallBack。 下面的演示是针对C#中的MonoTouch,它在目标C中是相同的,但方法的命名方式略有不同+语法。
// TableViewController
//CALLBACK Methods WHEN DELETING A ROW
public void DeletedItem (MyObject arrayObject, CustomCell cellInstance)
{
NSIndexPath[] arrayPath = new NSIndexPath[1] { this.myTableView.IndexPathForCell (cellInstance) };
this.myArray.RemoveItem (arrayObject);
this.myTableView.DeleteRows (arrayPath, UITableViewRowAnimation.Fade);
}
[Export("tableView:cellForRowAtIndexPath:")]
public virtual UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
...
cell.FactoryMethodsThatImUsing (myObject.items[indexPath.Row], DeletedItem);
return cell;
}
// CustomCell
public delegate void FOODelegateMethods (MyObject item, CustomCell instance);
public event FOODelegateMethods ItemDeleted;
我的工厂方法
if (!(this.ItemDeleted is Delegate)) {
this.ItemDeleted += new CustomCell.FOODelegateMethods (ResultCallBack);
}
然后是关于DeleteItem动作
partial void DeleteItem (NSObject sender)
{
ItemDeleted(arrayObject, this);
}