如何在Swift / iOS中创建模态列表

时间:2015-07-06 17:46:50

标签: ios iphone swift

我正在尝试在Swift中重新创建一个模式列表弹出窗口,类似于其他几个流行的应用程序中的弹出窗口。请参阅下面的示例。

Instagram Twitter

我目前的尝试是这样的:

@IBAction func showListOptions(sender: AnyObject) {
    // segue set to "Present Modally"
    // Presentation set to "Over Current Context"
    self.performSegueWithIdentifier("ShowListItems", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var vc = segue.destinationViewController as! UIViewController
    vc.view.backgroundColor = UIColor(red:0, green:0, blue:0, alpha:0.3)
}

下一个视图是常规ViewController,其中有几个按钮,其布局相对于屏幕底部。

需要注意的一点是,当我将Presentation的{​​{1}}样式设置为“全屏”时,背景会变成全黑(而不是所需的alpha(rgba(0,0, 0,0.3))。

segue设置为“Over Current Context”,我至少得到alpha颜色背景,但我仍然可以在我底部的tabbar上点击...然后将我的模态恢复黑屏。

非常感谢帮助!谢谢。

3 个答案:

答案 0 :(得分:0)

在第二个例子中是一个UIActionSheet(更容易实现)。 第一个是具有低alpha的UIView(约为具有0.5 alpha的BlackColor),UITableView被约束到底部,尾随和前导。用关键帧动画。使用UIViewController不是最简单的约。在这种情况下。

答案 1 :(得分:0)

感谢@ pbush25 - 我真正想要的是UIAlertController类型ActionSheet。这最终将为您完成所有工作:)

可以在http://ioscreator.com/tutorials/action-sheet-tutorial-ios8-swift

找到本教程(用Swift for iOS 8编写)

答案 2 :(得分:0)

如果您的目标是iOS 7.0及更高版本,则可以执行UIActionSheet

let myActionSheet = UIActionSheet()
myActionSheet.delegate = self
myActionSheet.addButtonWithTitle("Add event")
myActionSheet.addButtonWithTitle("close")
myActionSheet.cancelButtonIndex = 1
myActionSheet.showInView(self.view)

func actionSheet(myActionSheet: UIActionSheet!, clickedButtonAtIndex buttonIndex: Int){
    if(myActionSheet.tag == 1){
        if (buttonIndex == 0){
            println("Do something")
        }
    }
}

如果您的目标是iOS 8.0及更高版本,请执行UIAlertController

let myAlertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
let otherAction = UIAlertAction(title: "other", style: .Default, handler: otherHandler)
myAlertController.addAction(cancelAction)
myAlertController.addAction(otherAction)
self.presentViewController(myAlertController, animated: true, completion: nil)

func otherHandler(alertAction: UIAlertAction) {
    //Do something when other button is tapped
}