从iOS中的UIAlertView访问UITableViewCell

时间:2013-02-16 16:54:18

标签: ios uitableview uialertview

我在UITableView单元格中有一个删除按钮。此按钮的功能是从Core Data中删除该特定单元格的内容。这个过程无法撤消;所以,我添加了UIAlertView,让用户在继续删除之前确认他们的决定。

似乎我需要编写内部所有删除逻辑...

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

但是,这是一种委托方法。表格单元格的索引路径丢失了吗?单击UIAlertView按钮后如何访问UITableViewCell数据?

我现在想到的一个想法是使用alertview.superview遍历,直到找到UITableViewCell,并访问其indexPath属性。但这似乎并不优雅。是否应该有另一种方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用关联对象。这里将更详细地描述Associated Objects

设置您使用的对象:

objc_setAssociatedObject(alert, &key, userCode, OBJC_ASSOCIATION_RETAIN);

并获得对象。

SOCode *userCode = objc_getAssociatedObject(alertView, &key);

永远不要忘记导入<objc/runtime.h>,您还需要添加static char key;所以它属于两种方法的范围。

<强>参考: Can a UIAlertView pass a string and an int through a delegate

答案 1 :(得分:0)

因为UIAlertView是模态的,所以在将UITableViewCell呈现在(全局)变量之前保存UIAlertView的indexPath没有任何问题(并且可能清除该变量在- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex中(只是为了安全起见)。 至少这是我遇到这个问题时所做的。

PS。这远非最佳做法,但只要你做一些基本检查,你应该没问题。