当前位置: 首页 > 面试题库 >

UIMenuController没有显示菜单

司徒经纶
2023-03-14
问题内容

我是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
    }

}


 类似资料:
  • 我不熟悉eclipse IDE。我在代码中做了一些更改,希望签入/提交我的更改到svn。但当我右键点击一个项目并选择团队选项时,我看不到提交、更新等选项。我在互联网上搜索过这个问题,并尝试了以下选项, 未安装 关于我正在使用的eclipse IDE的更多详细信息如下,版本:Luna Service Release 1(4.4.1)Build id:20140925-1800 我在windows 8

  • 我试图在我的网格上创建一个贴花使用three.js和反应-三纤维。我相信我正确地设置了网格和材料,但由于某种原因,贴花没有出现在画布上。 这是包含模型、背板和贴花的父组件。 这是我从. glb文件创建t恤网格的组件的一部分。网格传递回父节点,然后传递到Decal组件。 以下是我尝试设置贴花网格的方式: 我没有得到任何错误,贴花只是没有出现。我希望有人有一些见解。没有太多关于贴花几何体与3J在那里,

  • 问题内容: 我是Java初学者 我试图制作我的jframe节目,但没有 它不起作用 问题答案: 我认为您没有正确声明您的JFrame。这是创建简单框架的示例:

  • 问题内容: 我看着其他问题,无法解决… 我做了以下安装django-debug-toolbar的操作: pip安装django-debug-toolbar 添加到中间件类: 3添加了INTERNAL_IPS: INTERNAL_IPS =(‘174.121.34.187’,) 4将debug_toolbar添加到已安装的应用程序 我没有收到任何错误或任何内容,并且该工具栏也没有显示在任何页面上,甚

  • 我的应用程序有问题。。。溢出菜单不可见!我可以点击手机的右上角,菜单项就会显示出来,但这三个点并没有显示出来。 这是我的xml: Java代码: 我在StackOverflow上尝试了其他解决方案,但它们似乎都不起作用。我试过在两部手机上运行这个应用程序,都是Android版本 更新:我尝试在应用程序中添加导航抽屉。再次,当我点击抽屉按钮应该在的一侧时,菜单会显示出来,但按钮不可见。。。 更新2:

  • 我正在用LibGDX编写一个处理背景纹理的新程序,并且刚刚开始实现屏幕。但当我测试它时,它只显示一个给定分辨率的黑屏。在实现的游戏类中,我使用setScreen(screen)-方法调用screen。 下面是代码: }