UIActionsheet委托clickedButtonAtIndex永远不会被调用
问题描述:
我想创建一个函数,当从不同的viewcontrollers调用时创建一个actionsheet。 问题是,虽然uiaction表被创建,我似乎无法执行任何指定的点击操作。事实上委托永远不会被调用。 单击任何按钮时,操作表被解除。UIActionsheet委托clickedButtonAtIndex永远不会被调用
我对功能码为:
func shareAction(){
var sheet: UIActionSheet = UIActionSheet();
print("Calling share action!");
let title: String = "Tell friends, make plans";
sheet.title = title;
sheet.addButtonWithTitle("Cancel")
sheet.addButtonWithTitle("WhatsApp");
sheet.addButtonWithTitle("Facebook");
sheet.addButtonWithTitle("Message");
sheet.addButtonWithTitle("More");
sheet.cancelButtonIndex = 0;
sheet.delegate=self;
sheet.showInView(self.view)
}
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int)
{
print("clicking the action sheet")
if(buttonIndex ==0){
print("this is 0")
}
这是其延伸NSObject的和UIActionSheetDelegate类内部。 我已经经历了每一点文件,并难以理解是什么导致了这个问题。
答
创建你的函数就像接受一个id类型的参数一样。其中你必须传递你当前的viewcontroller对象(self)。
答
我有同样的问题。问题在于,ARC处理ActionSheet操作并且是委托的泛型类已被释放。所以代理self
被解除分配,不会被调用。
请确保您保留实现ActionSheet调用的类。例如,您可以将其保存到调用视图控制器中的一个@property
变量中。
你没有使用'UIAlertController'的原因?代替一个委托,您可以使用您添加的每个操作特定的完成块。无论如何,UIActionSheet和UIAlertView都不赞成使用UIAlertController。 – keithbhunter
我试图保持我的代码与iOS 7兼容,并避免为8及以上版本编写不同的代码。这不是一个强有力的理由,但由于alertview没有以前的版本支持,我更喜欢使用uiactionsheet。 –
支持iOS 7的任何特定原因?绝大多数用户已经开始使用9了。Xcode 8/iOS 10将放弃对iOS 7的支持,如果这改变了您的想法:[请参阅此链接](https://twitter.com/jamesthomson/status/747451011183280128) – keithbhunter