2015-04-06 23 views
21

sonrasında ısrar ediyor Bir UISearchController uygulaması var. UI Bu eleman tamamen böyle kodda ayarlandı:UISearchController segue

searchController = UISearchController(searchResultsController: nil) 
searchController.searchResultsUpdater = self 
searchController.searchBar.delegate = self 
searchController.dimsBackgroundDuringPresentation = false 
searchController.hidesNavigationBarDuringPresentation = false 
searchController.searchBar.searchBarStyle = UISearchBarStyle.Minimal 

searchController.searchBar.frame = CGRectMake(searchController.searchBar.frame.origin.x, searchController.searchBar.frame.origin.y, searchController.searchBar.frame.size.width, 44.0) 

o zaman benim Tableview en tableHeaderView

tableView.tableHeaderView = searchController.searchBar 

Herşey eklemeden ediyorum iyi çalışıyor gibi görünüyor, ama aktif ve ben ne zaman benim tableView bir öğeyi seçin, benim app görünümünde devam eden arama denetleyicisi ile başka bir görünüm denetleyicisi için seçer. Bunun nasıl mümkün olabileceğinden emin değilim çünkü arama kontrolörü, başka bir görüntü kontrol cihazında tablo görünümünün bir alt görünümü olmalıdır. Bunun olmasını nasıl engelleyebilirim?

screenshot

+0

misiniz alacak 'HazırlıkForSegue' içinde 'sıfırlamak' çok hacky mi? –

+0

Bunun en iyi yanı, 'readyForSegue' olarak adlandırdığım zaman' tableView.tableHeaderView = nil''nin hiçbir etkisi olmadığıdır.Yoksa bütün "searchController" 'i iptal etmek mi istiyorsunuz? Tüm bunların üstesinden gelmenin en iyi yolunun bu durumda olacağından emin değilim. –

+1

, "searchController.active" öğesini "prepareForSegue" içinde "false" olarak ayarlamayı deneyin. –

cevap

50

Sen prepareForSegue false aktif özelliği elle ayarlanarak searchController gizleyebilirsiniz. Eğer definesPresentationContext

bir Boole değeri için varsayılan davranış belgelerine

definesPresentationContext = true 

almak için viewDidLoad() aşağıdaki satırı eklemek gerekir, Alternatif prepareForSegue()

searchController.active = false 

aşağıdaki kodu ekleyin o Görüntü denetleyicinin görüşünün, denetleyici veya onun torunlarından birinin bir görünüm denetleyicisi sunduğunda kapsanacağını belirtir.

Tartışma bir görünüm denetleyicisi sunulmuştur

iOS başvuru görünümü denetleyicisi ile başlar ve katılımlarının, bağlam sağlamak istiyorsa bunu sorar. Sunum sağlayan denetleyici bir bağlam sağlamazsa, , iOS sunumu izleme denetleyicisinin üst görünümüne denetleyiciden ister. iOS, bir görünüm denetleyici bir sunum içeriği sunana kadar görünüm denetleyici hiyerarşisi üzerinden arar. Bir görünüm sağlamak için denetleyicisinin görünümü sunmuyorsa, pencerenin kök görünümü denetleyici sunum içeriğini sağlar.

Bir denetleyici denetleyicisi doğru döndürürse, o zaman bir sunum içeriği sağlar. Görüntü denetleyicisinin görünümü tarafından kapsanan pencerenin kısmı, sunulan görüntü denetleyicinin görünümünün boyutunu belirler. Bu özellik için varsayılan değer yanlıştır.

+0

Teşekkür ederiz! Özellikle sunum içeriği hakkında biraz! –

+1

4 saat boyunca farklı seçenekleri denemek ve denemek, bunun için çalışma çözümü bulamadı! ** searchBar.hidden = true ** 'ya denedi ama her yerde çok fazla hasar veriyordu. Tekrar teşekkürler ! – Slavomir

+2

, definePresentationContext, tamamen doğru yanıttır. Reddetmek veya false olarak aktif olmak gibi başka bir seçenek kullanırsanız, orijinal aramanızı iptal eder, definesPresentationContext ise sizi tam olarak nasıl olmasını beklediğinize götürür. Çok teşekkürler. – Darren

3

kendi geçişler yönetmek ve görünümünü terk popToViewController kullanırsanız, searchController üzerinde bağlamı yerine görünümünü

searchController.definesPresentationContext = true 

sağlamak veya bir hatayı

popToViewController:transition: called on <UINavigationController 0x7f984204f800> while an existing transition or presentation is occurring; the navigation stack will not be updated 
+0

Bu doğru, 'self.definesPresentationContext = true' çalışmıyor – fujianjin6471

İlgili konular