swift中的UIActionSheet将取消按钮放在iOS 7中

时间:2015-01-23 18:30:28

标签: ios swift uiactionsheet

我正在将我的应用程序从目标c重写为Swift,我注意到UIActionSheet在Swift版本中的行为与obj-c版本不同。

对象版本

enter image description here

Swift版

enter image description here

仅在iOS 7上存在问题,在iOS 8上,Swift和Obj-c版本都可以正常工作(意味着取消在底部)

以下是相关的代码:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: nil)
sheet.addButtonWithTitle("Camera")
sheet.addButtonWithTitle("Photo Library")
sheet.showInView(self.controller.view)

知道怎么解决吗?

2 个答案:

答案 0 :(得分:19)

原来这是另一个在提出问题后立即找到答案的案例。

我所要做的只是将取消按钮添加为另一个按钮,然后指定其索引:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
sheet.addButtonWithTitle("Camera")
sheet.addButtonWithTitle("Photo Library")
sheet.addButtonWithTitle("Cancel")
sheet.cancelButtonIndex = 2
sheet.showInView(self.controller.view)

不确定他们是否改变了UIActionSheet在Swift中应该如何工作的方式,或者是否因为它在iOS 8中被弃用而没有人关心修复的错误

答案 1 :(得分:0)

这是我所拥有的 在viewDidLoad()或按钮操作上放置如下代码:

let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done", otherButtonTitles: "Yes", "No")
          actionSheet.showInView(self.view)

然后为他们的行为添加另一个函数:

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int)
    {
        switch buttonIndex{

        case 0:
            NSLog("Done");
            break;
        case 1:
            NSLog("Cancel");
            break;
        case 2:
            NSLog("Yes");
            break;
        case 3:
            NSLog("No");
            break;
        default:
            NSLog("Default");
            break;
            //Some code here..

        }

    }