我是iOS的新手。我正在尝试显示一个弹出菜单,但是我却无法显示菜单。请帮忙。这是我的代码:
//DidLoad function to initialize UILongPRessGestureRecognizer
override func viewDidLoad()
{
super.viewDidLoad()
var longprss : UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("display:"))
self.tableView.addGestureRecognizer(longprss)
}
//Bool function Can become first responder set to true
override func canBecomeFirstResponder() -> Bool {
return true
}
//become first responser set to true
override func becomeFirstResponder() -> Bool {
return true
}
//action handler of longPressGesture
func display(gesture: UILongPressGestureRecognizer)
{
self.becomeFirstResponder()
println("Is first responder")
var menu = UIMenuController.sharedMenuController()
var deleteItem = UIMenuItem(title: "Delete", action: Selector("deleteLine"))
var editItems = UIMenuItem(title: "Edit", action: Selector("editrow"))
menu.menuItems = [deleteItem ,editItems]
menu.setTargetRect(CGRect(x: 100, y: 80, width: 100, height: 50), inView: UIView())
menu.setMenuVisible(true, animated: true)
}
//perform action method
override func tableView(tableView: UITableView, performAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject!) {
}
//can perform action method.
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
if action == Selector("Delete")
{
return true
}
return false
}
请帮助我显示弹出菜单。
先感谢您。
//View controller class which is implementing TableViewCellDelegate
//Make sure you do followng
//subclass UITableViewCell using class name TableViewCell which has delegate
//you link UITableViewCell in ViewController class with TableViewCell in Custom Class column in interface builder(storyboard)
//In TableViewCell cell identifier you give name as Cell.
class ViewController: UITableViewController,TableViewCellDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
// tableview delegates
override func numberOfSectionsInTableView(tableView: UITableView) -> Int // Default is 1 if not
{
return 1;
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as? TableViewCell
if cell == nil {
cell = TableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "Cell")
}
cell?.delegate=self;
cell?.textLabel?.text="Cell text"
return cell!
}
func tableCellSelected(tableCell: UITableViewCell)
{
var longprss : UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("display:"))
tableCell.addGestureRecognizer(longprss)
}
//end tableview delegate
// menu delegates
override func canBecomeFirstResponder() -> Bool {
return true
}
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool
{
println(action);
if(action == Selector("deleteLine:") || action == Selector("editRow:"))
{
return true;
}
else
{
return false;
}
}
func deleteLine(sender: AnyObject?) {
println("delete line")
}
func editRow(sender: AnyObject?) {
println("edit row");
}
//end menu delegate
//action handler of longPressGesture
func display(gesture: UILongPressGestureRecognizer)
{
gesture.view?.becomeFirstResponder()
println("Is first responder")
var menu = UIMenuController.sharedMenuController()
var deleteItem = UIMenuItem(title: "Delete", action: Selector("deleteLine:"))
var editItems = UIMenuItem(title: "Edit", action: Selector("editRow:"))
menu.menuItems = [deleteItem ,editItems]
menu.setTargetRect(CGRect(x: 30, y: 8, width: 100, height: 50), inView: gesture.view!)
menu.setMenuVisible(true, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
//This is subclass of UITableViewCell
protocol TableViewCellDelegate
{
func tableCellSelected( var tableCell : UITableViewCell)
}
class TableViewCell: UITableViewCell {
var delegate : TableViewCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if((self.delegate) != nil)
{
delegate?.tableCellSelected(self);
}
// Configure the view for the selected state
}
}