我正在尝试在Swift中重新创建一个模式列表弹出窗口,类似于其他几个流行的应用程序中的弹出窗口。请参阅下面的示例。
我目前的尝试是这样的:
@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上点击...然后将我的模态恢复黑屏。
非常感谢帮助!谢谢。
答案 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
}