UIMenuController not showing up the menu

后端 未结 3 1730
别那么骄傲
别那么骄傲 2020-12-20 08:16

I am very new to iOS. I am trying to show a pop up menu,but some how I am unable to display menu. Please help. Here is my code:

//DidLoad function to initial         


        
相关标签:
3条回答
  • 2020-12-20 08:28
    //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
        }
    
    }
    
    0 讨论(0)
  • 2020-12-20 08:31

    You override -[UIResponder becomeFirstResponder] but don't call its super implementation. This basically turns the call into a no-op, and fails to install you in the responder chain. Unless you need to perform specific actions when becoming the first responder you don't need to override this method.

    0 讨论(0)
  • 2020-12-20 08:44
    I have tested code for displaying menu in UIView Its working. You can do for UItablecell or uitableView
    Do exactly the way I have done it will work
    you don't need to add this delegate, remove it from your code
       override func becomeFirstResponder
    
    
    example
    
    
     override func viewDidLoad()
    {
        super.viewDidLoad()
        var longprss : UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("display:"))
        self.view.addGestureRecognizer(longprss)
    }
    
    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");
    }
    
    
    //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: 100, y: 600, width: 100, height: 50), inView: self.view)
        menu.setMenuVisible(true, animated: true)
    
    }
    
    0 讨论(0)
提交回复
热议问题