代码之家  ›  专栏  ›  技术社区  ›  Lope

swift中的UIActionSheet将取消按钮置于iOS 7的顶部

  •  12
  • Lope  · 技术社区  · 11 年前

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

    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 回复  |  直到 11 年前
        1
  •  19
  •   Lope    11 年前

    事实证明,这又是一个在提出问题后立即找到答案的案例。

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

    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中的工作方式,也不确定这是一个没有人愿意修复的bug,因为它在iOS 8中已被弃用

        2
  •  0
  •   NSNoob    10 年前

    这是我得到的 上 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..
    
            }
    
        }