2016-07-03 28 views
5

Pracuję nad projektem, który używa systemu paska zakładek. Jednym z elementów paska zakładek jest JobPostingViewController. I Osadź go w UINavigationController. Istnieje UIButton o nazwie dodaj nowe zadanie w tym kontroler widoku .I zaimplementowałem pushviewcontroller, aby przejść do CreateJobPostViewController. Tam muszę dodać UIImagePickerController, aby wybrać obraz. Po naciśnięciu przycisku Gotowe lub wybraniu obrazu z biblioteki zostanie on odrzucony do JobPostingViewController. Ale powinien przejść do CreateJobPostViewController. Ktoś mi pomoże. Z góry dziękuję.Odrzucanie UIImagePickerController odrzuca wyświetlanie kontrolera widoku również

You can see the issue from this link

kodu w JobPostingViewController

@IBAction func openCreateJob(sender: AnyObject) { 
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("CreateJobPostViewController") as! CreateJobPostViewController 
    self.navigationController?.pushViewController(vc, animated: true) 
} 

kodu w CreateJobPostViewController

@IBAction func addImages(sender: AnyObject) { 
    imagePicker.allowsEditing = false 
    imagePicker.sourceType = .PhotoLibrary 
    presentViewController(imagePicker, animated: true, completion: nil) 
} 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

Nigdy wcześniej nie widziałem tego problemu. 'imagePicker' zdaje się być już zdefiniowane przed wywołaniem 'addImages'. Czemu? czy to jest używane gdzie indziej? Czy istnieje inny kod działający w tym samym czasie? Również dzwonisz do 'picker.dismissViewControllerAnimated', którego powinieneś poprosić rodzica (prezentując ViewController) o zwolnienie kontrolera modalnego (tj.' Self.dismissViewControllerAnimated'), nie mówiąc o tym, aby prezentowany sam siebie odrzucił. –

+0

Nie ma sensu definiowanie imagePicker jako zmiennej globalnej. Nie jest on nigdzie używany. Próbowałem obu opcji, które sugerujesz, aby odrzucić kontroler widoku wyboru obrazu. Byłem zmęczony znalezieniem rozwiązania i korzystałem z niego w inny sposób. Dziękuje za twoją sugestię. @ Simon McLoughlin – sant05

+0

Czy możesz dodać więcej kodu lub wyjaśnić układ aplikacji więcej. Wiele osób zwraca uwagę na różne podobne problemy i rozwiązania. Czy 'JobPostingViewController' jest widokiem kontenera? lub w widoku kontenera? Jak otwiera się ten ekran? gdy selektor zostanie odrzucony, wywoła metody 'viewWillAppear' /' viewDidAppear', 'viewDidLayoutSubviews' na' CreateJobPostViewController'. Czy robisz cokolwiek w tych metodach? –

Odpowiedz

4

Dodawanie Picker jako podrzędny

spróbować dodać imagepicker jako podrzędny do CreateJobPostViewController insted przedstawiając go, a następnie usunąć go z rodzicem w delegtes

@IBAction func openCreateJob(sender: AnyObject) { 

var picker: UIImagePickerController = UIImagePickerController() 
picker.delegate = self 
picker.allowsEditing = false 
picker.sourceType = .PhotoLibrary 
self.addChildViewController(picker) 
picker.didMoveToParentViewController(self) 
self.view!.addSubview(picker.view!) 
} 

a następnie

func imagePickerControllerDidCancel(picker: UIImagePickerController) { 

    picker.view!.removeFromSuperview() 
    picker.removeFromParentViewController() 
    } 

do prezentowania

pokazywanie selektora nad bieżącym tekstem z opcjami takimi jak edycja anuluj wybierz,

użycie picker.modalPresentationStyle = .overCurrentContext // przed przedstawieniem to

presentViewController(picker, animated: true, completion: nil) 
+0

Wow, dziękuję bardzo :) – sant05

+0

Chcę pokazać selektor powyżej paska nawigacji i paska kart, który oznacza na całym ekranie. Możesz mi pomóc? – sant05

+0

Możesz to zrobić, dodając kontroler selektora jako podgląd kontrolki self.navigation, np. [Self.navigationController.view addSubview: picker] przez – AnshaD

8

Naprawiono problem przez ustawienie obrazem oknie wyboru modalPresentationStyle do "OverCurrentContext":

picker.modalPresentationStyle = .overCurrentContext 
+1

Naprawdę to naprawiłem dla mnie. Metoda viewWillDisappear nie była dłużej wywoływana w kontrolerze oryginalnego widoku. – Alex

+1

To jest właściwa droga, aby to zrobić. Przyjęta odpowiedź jest Hacky. – Basanth

3

można użyć:

picker.modalPresentationStyle = .overCurrentContext 

ale w zależności od ekranu Układ może być lepiej użyć:

picker.modalPresentationStyle = .overFullScreen 

przeciwnym razie „anuluj”, „odzyskać” i „wykorzystać zdjęcie” przyciski mogą nie być widoczne.

0

Miałem ten sam problem, rozwiązałem go przy użyciu storyboardu (Xcode v9.2)

1 - Przejdź do serii ujęć, gdzie jest Twój ViewController, wybierz go

Select ViewController

2 - wpisywanie Prezentacja jak: bieżący kontekst

Set current context

Uwaga: Jeśli to nie działa Bieżący kontekst, wybierz Nad bieżącym kontekstem