您可以使用我的 ActionSheetDelegate 类来创建一个 Block 来代替actionSheet:clickedButtonAtIndex:
方法。由于块将在与创建操作表相同的上下文中创建,因此它可以捕获您希望删除的对象:
ActionSheetDelegate * delegate;
delegate = [ActionSheetDelegate delegateWithHandler:
^( UIActionSheet * sheet, NSInteger idx ){
if( idx == [sheet destructiveButtonIndex] ){
[self destroyObject:obj];
}
// Cancel button "falls through" to no action
}];
您还可以使用关联对象运行时工具将一个对象与另一个任意对象“关联” 。从本质上讲,这允许您随时将 ivar 添加到任何实例。
// Set:
objc_setAssociatedObject(sheet, &key, objectToDestroy, OBJC_ASSOCIATION_RETAIN);
// Retrieve:
id objectToDestroy = objc_getAssociatedObject(sheet, &key);
这只需要你在key
某个地方有一个变量。static char
正如我在这里所做的那样,文档建议使用其地址的文件级。但是,任何在设置和获取之间不会改变的值都可以使用。