Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift正确对齐通过编程创建的uibarbuttonite_Ios_Swift_Uibarbuttonitem - Fatal编程技术网

Ios Swift正确对齐通过编程创建的uibarbuttonite

Ios Swift正确对齐通过编程创建的uibarbuttonite,ios,swift,uibarbuttonitem,Ios,Swift,Uibarbuttonitem,我使用下面的代码以编程方式在Swift中创建UIBarButtonItem,但是图标没有正确地与边框对齐。这是按钮的代码。有人能告诉我如何修改下面的代码来正确对齐UIBarButtonItem图像吗 第一幅图显示了以编程方式创建的uibarbuttonite的位置,第二幅图显示了从故事板创建的uibarbuttonite。我希望通过编程创建的uibarbuttonite看起来像是使用故事板创建的uibarbuttonite。谢谢你的帮助 此外,如何正确设置按下uibarbuttontiem时的

我使用下面的代码以编程方式在Swift中创建UIBarButtonItem,但是图标没有正确地与边框对齐。这是按钮的代码。有人能告诉我如何修改下面的代码来正确对齐UIBarButtonItem图像吗

第一幅图显示了以编程方式创建的uibarbuttonite的位置,第二幅图显示了从故事板创建的uibarbuttonite。我希望通过编程创建的uibarbuttonite看起来像是使用故事板创建的uibarbuttonite。谢谢你的帮助

此外,如何正确设置按下uibarbuttontiem时的操作?我尝试了以下方法,但从未调用过

func actioncall(sender: AnyObject){
    println("action")
}
编辑1:由于agy的回复,我更新了代码如下

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)

   if (cond){

    var button: UIButton = UIButton()
    button.setImage(UIImage(named: "leftArrow.png"), forState: .Normal)
    button.frame = CGRectMake(0, 0, 40, 40)
    button.addTarget(self, action: "actioncall:", forControlEvents: .TouchUpInside)
    var leftBarButtonItem:UIBarButtonItem = UIBarButtonItem()
    leftBarButtonItem.customView = button

    var negativeSpacer:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    negativeSpacer.width = -20; // set the value you need
    self.navigationItem.leftBarButtonItems  = [negativeSpacer,leftBarButtonItem]

   }
}

func actioncall(sender: UIButton!){
        println("action")
}
但行动仍然失败。当我按下uibarbuttontiem并收到以下错误消息时,应用程序崩溃

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AppName.ProfileViewController actioncall:]: unrecognized selector sent to instance 0x7a07a470'

动作的正确功能是什么


编辑2:actioncall与我创建UIBarButtonItem的地方在同一个类中。我正在设置视图上的leftbarbutton将显示,因为根据查看此viewcontroller的用户,返回选项将替换位于leftbarbutton上的上一个选项

尝试添加负间隔符,并更改addTarget的targetForAction方法:

    var button: UIButton = UIButton()
    button.setImage(UIImage(named: "leftArrow.png"), forState: .Normal)
    button.frame = CGRectMake(0, 0, 40, 40)
    button.addTarget(self, action: "actioncall:", forControlEvents: .TouchUpInside)
    var leftBarButtonItem:UIBarButtonItem = UIBarButtonItem()
    leftBarButtonItem.customView = button

    var negativeSpacer:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    negativeSpacer.width = -5; // set the value you need
    self.navigationItem.leftBarButtonItems = [negativeSpacer,leftBarButtonItem]

func actioncall(sender: UIButton!){
    print("Called")
}

为什么,你没有使用IBOutlet以编程方式配置工具栏按钮并在故事板中创建它。使用IBAction实现该功能有些,negativeSpacer工作得很好。尽管如此,行动呼吁仍然失败。与目标“actioncall:”对应的func是什么?应该是func actioncall(发送者:UIButton!)我尝试了“func actioncall(发送者:UIButton!)”、“func actioncall(发送者:UIButton?)”、“func actioncall(发送者:UIButton!)、“func actioncall以及“func actioncall(发件人:UIBarButtonItem)“他们都没有工作。我可能做错了什么?我已经试过了代码,它工作得很好。你在哪里定义actioncall?您在哪里创建LeftBarButtonims?我在ViewWillAspect函数中定义actioncall。这就是我失败的原因吗?我更新了上面的代码来说明这一点。
    var button: UIButton = UIButton()
    button.setImage(UIImage(named: "leftArrow.png"), forState: .Normal)
    button.frame = CGRectMake(0, 0, 40, 40)
    button.addTarget(self, action: "actioncall:", forControlEvents: .TouchUpInside)
    var leftBarButtonItem:UIBarButtonItem = UIBarButtonItem()
    leftBarButtonItem.customView = button

    var negativeSpacer:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
    negativeSpacer.width = -5; // set the value you need
    self.navigationItem.leftBarButtonItems = [negativeSpacer,leftBarButtonItem]

func actioncall(sender: UIButton!){
    print("Called")
}