2016-06-28 74 views
0

我想创建一个函数,当从不同的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类内部。 我已经经历了每一点文件,并难以理解是什么导致了这个问题。

+2

你没有使用'UIAlertController'的原因?代替一个委托,您可以使用您添加的每个操作特定的完成块。无论如何,UIActionSheet和U​​IAlertView都不赞成使用UIAlertController。 – keithbhunter

+0

我试图保持我的代码与iOS 7兼容,并避免为8及以上版本编写不同的代码。这不是一个强有力的理由,但由于alertview没有以前的版本支持,我更喜欢使用uiactionsheet。 –

+0

支持iOS 7的任何特定原因?绝大多数用户已经开始使用9了。Xcode 8/iOS 10将放弃对iOS 7的支持,如果这改变了您的想法:[请参阅此链接](https://twitter.com/jamesthomson/status/747451011183280128) – keithbhunter

回答

0

创建你的函数就像接受一个id类型的参数一样。其中你必须传递你当前的viewcontroller对象(self)。

1

我有同样的问题。问题在于,ARC处理ActionSheet操作并且是委托的泛型类已被释放。所以代理self被解除分配,不会被调用。

请确保您保留实现ActionSheet调用的类。例如,您可以将其保存到调用视图控制器中的一个@property变量中。

相关问题