나는이 솔루션을 잠시 동안 찾고 있었지만 아무것도 얻지 못했습니다. 예를 들어 하나의 솔루션은
self.navigationItem.setRightBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: nil), animated: true)
이 코드는 “중지”이미지가있는 버튼을 추가합니다. 이와 같이 “검색,”새로 고침 “등의 다른 솔루션이 있습니다. 그러나 원하는 이미지로 프로그래밍 방식으로 단추를 추가하려면 어떻게해야합니까?
답변
버튼 프레임을 설정하지 않은 사용자 정의 버튼 이미지 :
init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)
지정된 이미지 및 기타 속성을 사용하여 새 항목을 초기화하는 데 사용할 수 있습니다 .
let button1 = UIBarButtonItem(image: UIImage(named: "imagename"), style: .plain, target: self, action: Selector("action")) // action:#selector(Class.MethodName) for swift 3
self.navigationItem.rightBarButtonItem = button1
이 Apple Doc을 확인하십시오 . 참고
버튼 프레임을 사용하여 사용자 정의 버튼 이미지가있는 UIBarButtonItem
에 대한 Swift 3.0
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "imagename"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn1.addTarget(self, action: #selector(Class.Methodname), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)
let btn2 = UIButton(type: .custom)
btn2.setImage(UIImage(named: "imagename"), for: .normal)
btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn2.addTarget(self, action: #selector(Class.MethodName), for: .touchUpInside)
let item2 = UIBarButtonItem(customView: btn2)
self.navigationItem.setRightBarButtonItems([item1,item2], animated: true)
FOR Swift 2.0
이상
let btnName = UIButton()
btnName.setImage(UIImage(named: "imagename"), forState: .Normal)
btnName.frame = CGRectMake(0, 0, 30, 30)
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside)
//.... Set Right/Left Bar Button item
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = btnName
self.navigationItem.rightBarButtonItem = rightBarButton
또는 단순히 다음 과 같이 init (customView 🙂 를 사용하십시오.
let rightBarButton = UIBarButtonItem(customView: btnName) self.navigationItem.rightBarButtonItem = rightBarButton
시스템 UIBarButtonItem의 경우
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: Selector("btnOpenCamera"))
self.navigationItem.rightBarButtonItem = camera
1 개 이상의 항목을 설정하려면 rightBarButtonItems
왼쪽을 사용하십시오.leftBarButtonItems
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
let item1 = UIBarButtonItem()
item1.customView = btn1
let btn2 = UIButton()
btn2.setImage(UIImage(named: "img2"), forState: .Normal)
btn2.frame = CGRectMake(0, 0, 30, 30)
btn2.addTarget(self, action: Selector("action2:"), forControlEvents: .TouchUpInside)
let item2 = UIBarButtonItem()
item2.customView = btn2
self.navigationItem.rightBarButtonItems = [item1,item2]
setLeftBarButtonItem
또는 사용setRightBarButtonItem
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: btn1), animated: true);
신속한> = 2.2의 경우 동작은
#selector(Class.MethodName)
…btnName.addTarget(self, action: #selector(Class.MethodName), forControlEvents: .TouchUpInside)
답변
Swift 4
또는로 훨씬 쉽습니다Swift 4.2
당신의 내부 ViewDidLoad
방법, 당신의 버튼을 정의하고 탐색 모음에 추가합니다.
override func viewDidLoad() {
super.viewDidLoad()
let logoutBarButtonItem = UIBarButtonItem(title: "Logout", style: .done, target: self, action: #selector(logoutUser))
self.navigationItem.rightBarButtonItem = logoutBarButtonItem
}
다음과 같이 action 매개 변수 내부에서 언급 한 기능을 정의해야합니다
@objc func logoutUser(){
print("clicked")
}
@objc
여전히 기존 항목을 사용하므로 접두사 를 추가해야합니다 (목표 C).
답변
UIBarButtonItem
customView로 설정 하기 만하면됩니다
예를 들면 다음과 같습니다.
var leftNavBarButton = UIBarButtonItem(customView:yourButton)
self.navigationItem.leftBarButtonItem = leftNavBarButton
또는 사용 setFunction
:
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: yourButton), animated: true);
답변
방금이 질문을 우연히 발견했으며 다음은 Swift 3 및 iOS 10에 대한 업데이트입니다.
let testUIBarButtonItem = UIBarButtonItem(image: UIImage(named: "test.png"), style: .plain, target: self, action: nil)
self.navigationItem.rightBarButtonItem = testUIBarButtonItem
모든 속성으로 UIButton을 만든 다음 UIBarButtonItem에 customView를 추가하는 것보다 훨씬 빠릅니다.
또한 이미지의 색상을 기본 파란색에서 흰색으로 변경하려면 항상 색조 색상을 변경할 수 있습니다.
test.tintColor = UIColor.white()
추신 : 당신은 분명히 앱의 선택기 등을 변경해야합니다 🙂
답변
Swift 3.0 이상에서는 UIBarButtonItem
다음과 같이 프로그래밍 방식으로 설정됩니다.
override func viewDidLoad() {
super.viewDidLoad()
let testUIBarButtonItem = UIBarButtonItem(image: UIImage(named: "test.png"), style: .plain, target: self, action: #selector(self.clickButton))
self.navigationItem.rightBarButtonItem = testUIBarButtonItem
}
@objc func clickButton(){
print("button click")
}
답변
원본 이미지로 LeftBarButton 설정.
let menuButton = UIBarButtonItem(image: UIImage(named: "imagename").withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(classname.functionname))
self.navigationItem.leftBarButtonItem = menuButton
답변
나는 같은 문제가 있고 다른 주제에서 답을 읽은 다음 다른 비슷한 방법으로 해결합니다. 어느 것이 더 효과적인지 모르겠습니다.
비슷한 문제
//play button
@IBAction func startIt(sender: AnyObject) {
startThrough();
};
//play button
func startThrough() {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTime"), userInfo: nil, repeats: true);
let pauseButton = UIBarButtonItem(barButtonSystemItem: .Pause, target: self, action: "pauseIt");
self.toolBarIt.items?.removeLast();
self.toolBarIt.items?.append( pauseButton );
}
func pauseIt() {
timer.invalidate();
let play = UIBarButtonItem(barButtonSystemItem: .Play, target: self, action: "startThrough");
self.toolBarIt.items?.removeLast();
self.toolBarIt.items?.append( play );
}