2012-06-14 22 views
28

Projemde varolan ViewController + xib var ve şimdi böyle, statik hücrelerle bir UITableView eklemek istiyorum:Storyboard'ları kullanmadan UITableView'da statik hücreler nasıl kullanılır?

TableView with static cells

Ama benim ekrana bir UITableView sürüklediğinizde Bilmiyorum Nitelikler Denetçisinde "İçerik> Statik" menüsüne sahip olmak.

Denetleyici alt sınıf UITableViewController'ı yapmayı denedim, ancak bu yardımcı olmuyor - Öznitelik Denetçisinde statik hücreleri kullanma seçeneğine hala sahip değilim.

StackOverflow'a baktım ama bu soruya herhangi bir yanıt alamadım. Mevcut tüm sorular xib dosyaları yerine Storyboard'lar (kullanmadığım) ile ilgilidir.

Tahminimce, bir UITableViewController'ı bir storyboard'a eklediğinizde Xcode bir tür sihir yapar, ancak varolan bir xib'i UITableViewController'dan miras aldığınızda değiştirmezsiniz.

Mevcut bir xib'e statik hücrelerle nasıl tablo görünümü ekleyeceğinize dair herhangi bir öneri?

cevap

43

Statik tablo görüntüleme hücreleri yalnızca storyboard'lar kullanıldığında kullanılabilir. Ancak, tüm UI'niz için storyboard kullanmıyorsanız, yine de onları bir ekran koleksiyonu yerine tek tek ekranlar için kullanabilirsiniz.

Bunu yapmak için Dosya Görünümünün özel görünüm denetleyicinizin alt sınıfına ayarlanmış bir tek denetleyicili UIStoryboard dosyası oluşturabilirsiniz. VC'nin tanımlayıcısını bir değere ayarlayın. Bunu görüntülemek istediğinizde, storyboard'u alın ve ardından storyboard'unuzdan VC'yi oluşturarak view controller alt sınıfınızı oluşturun.

UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"your storyboard" bundle:nil]; 
CustomViewController = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"custom identifier"]; 

Bu VC'yi uygulamanızda her zamanki gibi sunabilirsiniz.

Bu, tüm uygulamanızı kullanmak üzere dönüştürmek zorunda kalmadan film şeridini kullanmaya başlamak için harika bir yoldur.

+5

Bu durumda performanstan ne haber? – mariusLAN

+1

ios 4.3 veya önceki sürüm için storyboard oluşturamaz :( – tesmojones

22

Bu storyboardlar olmadan yapılabilir geçerli:

  1. Denetleyiciniz tableview temsilci ve kaynağı ... UITableViewDelegate için protokolleri hazırlamasının gerekeceğini UITableViewDataSource
  2. sizin .xib bir tablo görünümüne ekleyin; tablo görünümünün stilini "gruplandırılmış" olarak ayarlayın
  3. Tablonuzu kontrolörünüzdeki bir özelliğe bağlayın (buna "sizinTableView" olarak adlandırın)
  4. Tablo görünüm hücrelerini .xib'e ayrı görünümler olarak ekleyin ... i.e. değil tablo görünümü alt raporları olarak ... onlar .xib içinde serbest kayan olacak. (aşağıdaki örnek resme bakın)
  5. Tablo hücrelerine kontroller/etiketler vb. ekleyin.
  6. Her tablo görüntüleme hücresi için Öznitelikler'de "Tanımlayıcı" alanına benzersiz dizeler atayın. vb (IBAction) handleSliderCell, -
  7. kontrolör yılında IBAction-ed yöntemlerine hücrelerin denetimler için gönderme olayları bağlar denetleyicisi (sliderCell, switchCell, vb) diğer özellikleri için tablo hücrelerini bağlayınkontrolörünüzün viewDidLoad yönteminde
  8. , (self.yourTableControl.delegate = kendi kendine; self.yourTableControl.dataSource = kendi kendine;) kontrolöre temsilci ve tablo bakış kaynağı atamak
  9. uygulamak numberOfSectionsInTableView, numberOfRowsInSection ve Kontrol ünitesinde cellForRowAtIndexPath
  10. tableView
  11. : cellForRowAtIndexPath uygun indexPath için işaretçileri işleyicinizin rutinleri gitmeli tablo hücreleri için kontroller için

Olaylar değerleri vb yourFirstCell, yourSecondCell, iade :, ...

. adım için

Örnek: burada, 10 numaraya geldiğinde xib

+1

Sadece storyboard'ların desteklendiği iOS sürümlerini hedefliyorsa bu yaklaşımın bir avantajı var mı? – philwilks

+0

Benim için çalışmıyor. bundle ** error. Ve bir nib'i açıkça kaydedemiyorum çünkü IB'de oluşturulan hücrelerle ilişkili sınıflar yok. Bu yüzden 'UITableViewCell' alt sınıflarını oluşturdum ve onları hücreye ekledim ve tekrar denedim ama yine de hayır Aynı hata geliyor – Isuru

+1

@philwilks - bu storyboard'ların avantajı, storyboard'ları kullanmamanızın konfigürasyon yönetim faydaları elde etmektir - böylece birden çok dev kullanıcı UI'yi güncelleştiriyorsa, böyle bir muddle almazsınız –

0

, BVBın yanıta genişletmek için sizin tableview temsilci yöntemleri için Swift 3 snippet'leridir. Xib'deki tüm hücrelere çıkışlar eklediğinizden emin olun.

Tablo görünümü bölümlerinizi el ile oluşturduğunuzda, indexPath'un tablonuzun yapısını temsil eden 2 boyutlu bir diziye eşit olduğunu unutmayın. örneğin, indexPathtableView(cellForRowAt indexPath: IndexPath)'a [1][0]'a eşit olduğunda, hücreniz ikinci bölümün ilk konumuna yerleştirilir.

Değerler indexPath.row ve indexPath.section özellikleriyle indexPath'dan çekilebilir. Bu değerleri kullanarak, bölümlerinizi IBOutlets'inizden hangisini tercih ederseniz edinebilirsiniz.

@IBOutlet var is_enabled: UITableViewCell! 
@IBOutlet var is_public: UITableViewCell! 

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    switch(section){ 
     case 0: 
      return "Cell 1" 
     case 1: 
      return "Cell 2" 
     default: return "" 

    } 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func numberOfSections(in tableView: UITableView) -> Int { 
    return 2 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    print("index path here", indexPath) 
    if(indexPath.section == 0) { 
     return is_enabled 
    } 
    else if(indexPath.section == 1) { 
     return is_public 
    } else { 
     return is_enabled 
    } 
} 
İlgili konular