【问题标题】:UIButton - Giving the button an action?UIButton - 给按钮一个动作?
【发布时间】:2015-08-30 15:32:02
【问题描述】:

我通过代码制作了一个按钮(不是在我的故事板上),是的,它显示没有问题,但现在我希望它在按下时执行一个操作。

按钮代码:

let backToHomeButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton
backToHomeButton.frame = CGRectMake(100, 100, 100, 50)
backToHomeButton.backgroundColor = UIColor.greenColor()
backToHomeButton.setTitle("Button", forState: UIControlState.Normal)
backToHomeButton.addTarget(self, action: "Action: ", forControlEvents: UIControlEvents.TouchUpInside)
self.view?.addSubview(backToHomeButton)

我希望它回到主屏幕。

这个我试过了,还是不行:

let backToHomeButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton
backToHomeButton.frame = CGRectMake(100, 100, 100, 50)
backToHomeButton.backgroundColor = UIColor.greenColor()
backToHomeButton.setTitle("Button", forState: UIControlState.Normal)
backToHomeButton.addTarget(self, action: "Action: ", forControlEvents: UIControlEvents.TouchUpInside)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("MainMenuViewController") as! UIViewController
self.view?.addSubview(backToHomeButton)

谁能告诉我我做错了什么,我该如何解决?谢谢!

【问题讨论】:

    标签: ios swift uibutton


    【解决方案1】:

    试试这个:

    let backToHomeButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton
    backToHomeButton.frame = CGRectMake(100, 100, 100, 50)
    backToHomeButton.backgroundColor = UIColor.greenColor()
    backToHomeButton.setTitle("Button", forState: UIControlState.Normal)
    backToHomeButton.addTarget(self, action: "Action:", forControlEvents: UIControlEvents.TouchUpInside)
    self.view?.addSubview(backToHomeButton)
    

    // 存在

    func Action(sender:UIButton)
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("MainMenuViewController") as! UIViewController
        self.presentViewController(vc, animated: true, completion: nil)
    }
    

    //第二个选项,如果你推回主视图

    func Action(sender:UIButton)
    {
    navigationController?.popToRootViewControllerAnimated(true)
    }    
    

    //或之前的控制器

     func Action(sender:UIButton)
      {
     navigationController?.popViewControllerAnimated(true)
      }
    

    【讨论】:

    • 作为一种良好做法,实例方法的名称应以小写字母开头。
    • 别怪我,看看那个原始问题中那个函数的名字:)
    • 我认为这在技术上回答了 OP 的问题,但如果 OP 想要“返回”,最好不要展示另一个视图控制器......
    • @Lamar 如果问题有错误,你不应该继续犯同样的错误,你应该纠正它。
    • @Lamar 当我输入presentViewController(vc, animated: true, completion: nil) 时,我收到一条错误消息,提示使用“未解析的标识符'presentViewController'”
    【解决方案2】:

    你只需要给按钮添加一个Action,并在action方法中关闭视图:

    对于按钮复制这个:

    let backToHomeButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton
    backToHomeButton.frame = CGRectMake(100, 100, 100, 50)
    backToHomeButton.backgroundColor = UIColor.greenColor()
    backToHomeButton.setTitle("Button", forState: UIControlState.Normal)
    backToHomeButton.addTarget(self, action: "pressed:", forControlEvents: .TouchUpInside)
    

    然后只需添加此方法。并根据您呈现视图的方式选择关闭方法。如果不确定,请尝试一个然后另一个。

    func pressed(sender: UIButton!) {
    
       //IF YOU PRESENTED THE VIEW AS A MODAL
    
        self.dismissViewControllerAnimated(true, completion: {});
    
       //IF YOU PUSHED INTO THE VIEW
    
        navigationController.popViewControllerAnimated(true) 
    }
    

    希望对你有帮助。

    【讨论】:

    • 如果视图控制器已经在导航堆栈中,但它不在当前控制器之前,则应使用方法popToViewController(_:animated:)
    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多