2016-07-03 38 views
5

Tabbar sistemini kullanan bir proje üzerinde çalışıyorum. Sekme çubuğunun öğelerinden biri JobPostingViewController'dır. UINavigationController'a yerleştirdim. Bu görünüm denetleyicisinde yeni bir iş eklemek için bir UIButton vardır. CreateJobPostViewController gitmek için pushviewcontroller uygulanan. Görüntüyü seçmek için UIImagePickerController eklemek gerekiyor. Tamamla düğmesine dokunduğumda veya kitaplıktan bir görüntü seçtiğimde JobPostingViewController uygulamasına son verir. Ama CreateJobPostViewController'a gitmeli. Herhangi biri lütfen bana yardım edin. Şimdiden teşekkürler. JobPostingViewControllerUIImagePickerController'ın işten çıkarılması, görüntüleme denetleyicisini de reddeder

yılında

You can see the issue from this link

Kod

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

Kod CreateJobPostViewController içinde

@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

Bu sorunu daha önce hiç görmedim. 'imagePicker' 'addImages' çağrılmadan önce zaten tanımlanmış görünüyor. Niye ya? başka bir yerde mi kullanılıyor? Aynı zamanda çalışan başka bir kod var mı? Ayrıca "picker.dismissViewControllerAnimated" çağrıyorsunuz, ebeveynin (presentViewController) modal denetleyiciyi (yani, self.dismissViewControllerAnimated) reddetmesini varsayarak, kendisinin reddetmesini söyleyin. –

+0

Global değişken olarak imagePicker öğesini tanımlayan başka bir anlam ifade etmez. Hiçbir yerde kullanılmaz. Resim seçici görünümü denetleyicisini reddetmenizi önerdiğiniz iki seçeneği denedim. Çözümü bulmaktan yoruldum ve başka bir yol kullanıyorum. Öneriniz için teşekkür ederiz. @ Simon McLoughlin – sant05

+0

Daha fazla kod yayınlayabilir veya uygulamanın düzenini daha fazla açıklayabilir misiniz? Benzer sorunları ve çözümleri vurgulayan birçok insan var. JobPostingViewController kapsayıcı görünümü mü? veya konteyner görünümünde? Bu ekran nasıl açılır? Seçici işten çıkarıldığında, 'CreateJobPostViewController' üzerindeki 'viewWillAppear' /' viewDidAppear', 'viewDidLayoutSubviews' yöntemlerini tetikler. Bu yöntemlerin içinde herhangi bir şey yapıyor musunuz? –

cevap

4

subview Seçici ekleme

senin CreateJobPostViewController bir Subview sunulması Insted olarak ImagePicker eklemeyi deneyin ve sonra 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!) 
} 

ve sonra

func imagePickerControllerDidCancel(picker: UIImagePickerController) { 

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

sunulması için de ebeveyn çıkarın

currentcontext üzerinde seçim göstergesini düzenleme seçimleri gibi seçeneklerle göster,

kullanım picker.modalPresentationStyle = .overCurrentContext görüntü toplayýcýsýnýn modalPresentationStyle için "OverCurrentContext" ayarlayarak

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

wow çok teşekkür ederim :) – sant05

+0

Tüm ekran üzerinde demektir navigasyon çubuğu ve sekme çubuğunun üstünde seçici göstermek istiyorum. Lütfen bana yardım edebilir misin? – sant05

+0

Seçici kontrolörünüzü self.navigationcontroller'ın alt görünümü olarak [self.navigationController.view addSubview: seçici] – AnshaD

8

sorunu düzeltildi o Sunumdan önce //:

picker.modalPresentationStyle = .overCurrentContext 
+1

'a ekleyerek yapabilirsiniz. ViewWillDisappear yöntemi, kaynak görünüm denetleyicisine artık çağrılmadı. – Alex

+1

Bunu yapmanın doğru yolu budur. Kabul edilen cevap bir Hacky'dir. – Basanth

3

Sen kullanabilirsiniz:

picker.modalPresentationStyle = .overCurrentContext 

ancak ekranınıza bağlı olarak düzen, kullanmak için daha iyi olabilir:

picker.modalPresentationStyle = .overFullScreen 

yoksa reklam düğmeleri görünmeyebilir "fotoğraf kullanmak" "geri almak" ve "iptal".

0

Aynı sorunu yaşadım, storyboard'u kullanarak çözdüm (Xcode v9.2)

1 - senin ViewController olan film şeridine, git, o

Select ViewController

2 seç - olarak sunumu ayarlayın: Cari Bağlam

Set current context

Not: bunun ise Geçerli Bağlam çalışmıyor, Aşırı Akım Bağlamını seçin