Как определить, откуда был представлен UIImagePickerView? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть две кнопки, button1 и button2.нажатие на эти кнопки представит UIImagePickerViewController.В методе делегата didFinishPickingMediaWithInfo как я могу определить, от какого действия кнопки был представлен UIImagePickerViewController?

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Не используйте для этого любую переменную globle. Вы должны использовать для этого подпрограммы времени выполнения objc_setAssociatedObject и objc_getAssociatedObject:

var kAssociatedObject = "associatedObject"
@IBAction func firstButtonAction(_ sender:UIButton) {
        objc_setAssociatedObject(picker, &kAssociatedObject, sender, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)

}
@IBAction func secondButtonAction(_ sender:UIButton) {
        objc_setAssociatedObject(picker, &kAssociatedObject, sender, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)

}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {

       let sender = objc_getAssociatedObject(picker, &kAssociatedObject) 

      if sender == firstButton {
         //First button selected
      } else if sender == secondButton {
        //second button selected
      }
        //Now you have button object in your delegate method, you can check which button is selected and you also can associate any type of object and get data. This is the best way to attach and get the data from any object


}

А также вы можете использовать свойство тега следующим образом:

   //set tag
    var imagePicker = UIImagePickerController()
    imagePicker.view.tag


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
    // get tag
    let tagData = picker.view.tag
   // you can handle your condition accordingly
    }
0 голосов
/ 21 мая 2018

вы можете идентифицировать свой объект, используя свойство Tag, изначально присваивая тег для каждой вашей кнопки UIB, вторично, когда присутствует UIImagePickerController, присваивайте тегу кнопки UIImagePickerController.view.tag , например,

, например,

 @IBAction func buttonOneClick(_ sender:UIButton) {
    //... code for present the UIImagePickerController
    yourimagePicker.view.tag = sender.tag
}
@IBAction func buttonTwoClick(_ sender:UIButton) {
      //... code for present the UIImagePickerController
       yourimagePicker.view.tag = sender.tag
}

или создайте общий метод для вашего UIButton

 @IBAction func buttonPresentImage(_ sender:UIButton) {
      //... code for present the UIImagePickerController
       yourimagePicker.view.tag = sender.tag
}

наконец, метод делегата UIImagePickerController, который вы можете определить

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if picker.view.tag == button1.tag {
        // its button1
    } else {
        // its button2
    }
}
0 голосов
/ 21 мая 2018

Взять одну переменную.

var selectedButtonTag: Int = 0

OnClick кнопки установить переменную следующим образом.

    @IBAction func buttonFirstClick(_ sender:UIButton) {
        selectedButtonTag = 0
    }
    @IBAction func buttonSecondClick(_ sender:UIButton) {
        selectedButtonTag = 1
    }

В методе didFinishPickingMediaWithInfo вы можете сделать это следующим образом.

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if selectedButtonTag == 0 {
            print("First button clicked.")
        } else {
            print("Second button clicked.")
        }
    }
...