我試圖創建一個UIBarButtonItem,一旦按鈕被點擊後打開相機。出於某種原因,我的takePicture(_sender :)函數似乎沒有被調用。UIBarButtonItem不觸發IBAction
我最初嘗試使用Interface Builder創建我的UIBarButtonItem。這裏是接口和連接的UIBarButtonItem的行動截圖:
,這裏是我的takePicture代碼(_sender :)功能:
@IBAction func takePicture(_ sender: UIBarButtonItem) {
print("Taking picture...")
let imagePicker = UIImagePickerController()
// If the device has a camera, take a picture; otherwise,
// just pick from photo library
if UIImagePickerController.isSourceTypeAvailable(.camera) {
imagePicker.sourceType = .camera
} else {
imagePicker.sourceType = .photoLibrary
}
imagePicker.delegate = self
// Place image picker on the screen
present(imagePicker, animated: true, completion: nil)
}
小圈在我的功能聲明旁邊填寫並正確連接:
但是,當我加載模擬器並按下按鈕時,UIImagePickerController從不出現,並且我的print()函數從不在代碼中調用。
因此,我試圖以編程方式聲明UIBarButtonItem,看看它是否是Xcode Interface Builder的底層問題。這裏是我的代碼:
(注:我從Interface Builder中刪除的UIBarButtonItem,然後我用@IBOutlet連接UIToolbar我的代碼)
override func viewDidLoad() {
super.viewDidLoad()
let takePictureBarButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.camera, target: self, action: #selector(DetailViewController.takePicture))
toolBar.setItems([takePictureBarButton], animated: false)
}
@objc func takePicture() {
print("Taking picture...")
let imagePicker = UIImagePickerController()
// If the device has a camera, take a picture; otherwise,
// just pick from photo library
if UIImagePickerController.isSourceTypeAvailable(.camera) {
imagePicker.sourceType = .camera
} else {
imagePicker.sourceType = .photoLibrary
}
imagePicker.delegate = self
// Place image picker on the screen
present(imagePicker, animated: true, completion: nil)
}
截至調試這最後掙扎的企圖程序並試圖找到問題所在,我在我的UI中創建了一個臨時按鈕,並將它連接到我的takePicture(_sender :)函數(而不是將UIBarButtonItem的簽名更改爲UIButton)。這工作完美。這告訴我,問題不在於函數本身,而是與連接有關。
如果我嘗試連接的動作一個UIButton,這將是建議的一個有價值的一塊。但是,UIBarButtonItem沒有touchUpInside事件。 UIBarButtonItem是UIBarItem的子類,它是NSObject的子類。而UIButton是UIControl的一個子類,它包含所有的touchUpInside()動作。 可能要更仔細地檢查文檔: - https://developer.apple.com/documentation/uikit/uicontrolevents - https://developer.apple.com/documentation/uikit/uibaritem - HTTPS: //developer.apple.com/documentation/uikit/uibarbuttonitem – Mattkx4