#arrays #swift
#массивы #swift
Вопрос:
var images : [UIImage?] = [nil, nil, nil, nil, nil]
У меня есть массив изображений. Я хочу заменить ноль на изображение с помощью кнопки sender.tag
@IBAction func addImage(_ sender: UIButton) {
var configuration = PHPickerConfiguration()
configuration.selectionLimit = 1
configuration.filter = .any(of: [.images])
let picker = PHPickerViewController(configuration: configuration)
picker.delegate = self
self.present(picker, animated: true, completion: nil)
Если array[index] равен нулю, показать изображение.
Но array [index] — это фотография, показать фотографию
extension EditViewController: PHPickerViewControllerDelegate {
@available(iOS 14, *)
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
picker.dismiss(animated: true, completion: nil)
let itemProvider = results.first?.itemProvider
if let itemProvider = itemProvider,
itemProvider.canLoadObject(ofClass: UIImage.self) {
itemProvider.loadObject(ofClass: UIImage.self) { (object, error) in
if let image = object as? UIImage {
DispatchQueue.main.async {
print("image: (image)")
print("IMAGES ARRAY : (self.images)")
}
}
}
} else {
//
}
}
}
Этот код является PHPicerViewControllerDelegate (https://ikyle.me/blog/2020/phpickerviewcontroller )
Комментарии:
1. используйте выбранный индекс при нажатии кнопки добавить и поместите изображение в выбранный индекс
Ответ №1:
вы можете сделать это с помощью следующего метода назначьте теги своим UIButtons и при действии UIButton добавьте свое изображение в определенный индекс массива, управляя объектом
например
var selectedIndex or selectedTag // of your UIButton
при нажатии кнопки обновите значение SelectedIndex на
self.SelectedIndex = sender.tag
затем в вашем методе didFinishPicking обновите массив изображений выбранным изображением в SelectedIndex и обновите изображения кнопок следующим образом
images.insert(yourSelectedImage, at: selectedIndex)
self.setImagesForButtons()
теперь назначьте выбранное изображение UIButton с помощью UIButton Outlet
, например, у вас есть пять выходов для ваших пяти кнопок
@IBOutlet weak var yourButtonOutlet1: UIButton!
@IBOutlet weak var yourButtonOutlet2: UIButton!
@IBOutlet weak var yourButtonOutlet3: UIButton!
@IBOutlet weak var yourButtonOutlet4: UIButton!
@IBOutlet weak var yourButtonOutlet5: UIButton!
func setImagesForButtons()
{
if (self.selectedIndex == 0)
{
if (images[selectedIndex] != nil)
{
self.yourButtonOutlet1.setImage(images[selectedIndex], for: .normal)
}
else
{
// set plus icon image to your button
}
}
else if (self.selectedIndex == 1)
{
if (images[selectedIndex] != nil)
{
self.yourButtonOutlet2.setImage(images[selectedIndex], for: .normal)
}
else
{
// set plus icon image to your button
}
}
else if (self.selectedIndex == 2)
{
if (images[selectedIndex] != nil)
{
self.yourButtonOutlet3.setImage(images[selectedIndex], for: .normal)
}
else
{
// set plus icon image to your button
}
}
else if (self.selectedIndex == 3)
{
if (images[selectedIndex] != nil)
{
self.yourButtonOutlet4.setImage(images[selectedIndex], for: .normal)
}
else
{
// set plus icon image to your button
}
}
else if (self.selectedIndex == 4)
{
if (images[selectedIndex] != nil)
{
self.yourButtonOutlet5.setImage(images[selectedIndex], for: .normal)
}
else
{
// set plus icon image to your button
}
}
}
Ответ №2:
Вы можете использовать в сборке Средство выбора изображений
extension EditProfileViewController: UIImagePickerControllerDelegate,UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
// localUserData.ProfileImage = info[.originalImage] as? UIImage
self.imgProfile.image = info[.originalImage] as? UIImage
self.dismiss(animated: true, completion: {
let yes = UIAlertAction(title: "Yes", style: .default, handler: { _ in
self.imgProfile.image = self.localUserData.ProfileImage
})
let no = UIAlertAction(title: "No", style: .default, handler: nil)
self.showCustomAlert(alertMsg: ValidationMsg.imageUpload.rawValue, actions: [yes,no])
})
}
}
Комментарии:
1. если вам нужна пользовательская функция оповещения, дайте мне знать
Ответ №3:
Правильный ответ был дан, просто хочу сделать его короче.
Каждая кнопка должна иметь тег от 0 до 4.
Затем вы можете создать свойство в своем контроллере. Пусть будет selectedIndex
так . В дополнительном изображении вы должны добавить строку:
@IBAction func addImage(_ sender: UIButton) {
self.selectedIndex = _sender.tag
....
}
Затем в методе делегирования после получения изображения:
images[selectedIndex] = image
let buttons = [button1, button2, button3, button4, button5]
let selectedButton = buttons[selectedIndex]
if (images[selectedIndex] != nil) {
selectedButton.setImage(images[selectedIndex], for: .normal)
}
else {
selectedButton.setImage(imagePlus, for: .normal)
}