2015-01-15 20 views
30

Şimdiye kadar, tek bir görünüm denetleyicisinde birden çok görünümün nasıl değiştirileceğini hala anlayamıyorum. Benim storyboard bu gibi.Swift - Segmented control - Birden çok görüntüyü değiştir

enter image description here

Şu anda benim görünümü denetleyicisi içinde iki görüşlerini gömmek istiyorum. segmentli kontrolü için

enter image description here

Kodum şimdiye dek bir görünüm denetleyicisi iki Görünümler arasında geçiş için.

import UIKit 

class PopularHistoryViewController: UIViewController { 

    @IBOutlet weak var segmentedControl: UISegmentedControl! 

    @IBAction func indexChanged(sender: UISegmentedControl) { 
     switch segmentedControl.selectedSegmentIndex 
     { 
     case 0: 
      NSLog("Popular selected") 
      //show popular view 
     case 1: 
      NSLog("History selected") 
      //show history view 
     default: 
      break; 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 


} 

Başka bir şey, Denetleyicimin içine iki görünüm eklersek, onu ayırmak en iyi yöntem nedir?

Lütfen tavsiye edin. Teşekkür ederim.

cevap

30

Gerekli görünümlerinizi göstermek/gizlemek için UIViewisHidden özelliğini kullanabilirsiniz. Önce Arayüz oluşturucu üzerinden

@IBOutlet weak var historyView: UIView! 
@IBOutlet weak var popularView: UIView! 

@IBAction func indexChanged(_ sender: UISegmentedControl) { 
    switch segmentedControl.selectedSegmentIndex { 
    case 0: 
     historyView.isHidden = true 
     popularView.isHidden = false 
    case 1: 
     historyView.isHidden = false 
     popularView.isHidden = true 
    default: 
     break; 
    } 
} 

Not IBOutlets her iki görüşlerini bağlamak zorunda: bu Swift 1'de hidden ve 2. Her

+0

Hey, Bunu hikaye tahtasında fiziksel olarak nasıl yapıyorsunuz? historyView ON PopularView nasıl yazıyorsun? –

+1

her durumda sonu eklemek gerekir –

1

Her iki görünümü de görüntü panosundaki görünüm denetleyicisine ekleyin ve bunlardan birini gizlenecek şekilde ayarlayın = yes veya alpha = 0. Dizin değişti işlevi çağrıldığında, ekranda geçerli görünümü gizli olarak ayarlayın = yes/alpha 0 ve daha önce gizli olan görünümü gizli = no/alpha = 1 olarak ayarlayın. Bu, istediğiniz şeyi elde etmelidir.

6

İlk iki çıkışları yaratmak adlandırılmış ve görüşlerine hortumu bağlamak edildi ViewController.

@IBOutlet weak var firstView: UIView! 
@IBOutlet weak var secondView: UIView! 

Ve benzeri kodu değiştirin: Outlet oluşturmak istemiyorsanız görüşlerini bireysel etiketleri (101 Say ve 102) atamak,

@IBAction func indexChanged(sender: UISegmentedControl) 
{ 
    switch segmentedControl.selectedSegmentIndex 
    { 
    case 0: 
     firstView.hidden = false 
     secondView.hidden = true 
    case 1: 
     firstView.hidden = true 
     secondView.hidden = false 
    default: 
     break; 
    } 
} 

ve hoşuna yapabilirsiniz:

@IBAction func indexChanged(sender: UISegmentedControl) 
{ 
    switch segmentedControl.selectedSegmentIndex 
    { 
    case 0: 
     self.view.viewWithTag(101)?.hidden = false 
     self.view.viewWithTag(102)?.hidden = true 
    case 1: 
     self.view.viewWithTag(101)?.hidden = true 
     self.view.viewWithTag(102)?.hidden = false 
    default: 
     break; 
    } 
} 
40

İki örtüşen alt görünüm için Xcode'ta UI düzenini yapmak isterseniz, iki UIContainerViewController'ı kullanmak daha iyi bir çözümdür ve aynı yolu kullanın Yukarıdaki cevaba göre gizli mülkiyeti ting.

enter image description here

+3

bana kodları göster –

+1

ilginç görünüyor. bazı kod gönderebilir misin? sayesinde – Lachtan

+0

'@IBAction fonk segmentSelectedAction (gönderen: AnyObject) { anahtar sender.selectedSegmentIndex { durumda 0: firstContainer.hidden = false secodeContainer.hidden = Gerçek durumda 1: firstContainer.hidden = Gerçek secodeContainer.hidden = false varsayılan: mola; } } – vichhai

0

@IBAction fonk acSegmentAction (_ gönderen: Herhangi) {burada

switch acSegmentedControl.selectedSegmentIndex 
    { 
    case 0: 
     // print("addressview selected") 

     addressView.isHidden = false 
     contactProviderView.isHidden = true 
    case 1: 
     //print("contact provider selected") 

     addressView.isHidden = true 
     contactProviderView.isHidden = false 
    default: 
     break; 
    } 

    } 
0

XCODE 8.3.2 updates

xcode 8.3.2

konteyner Görüntüleme fonksiyonu olarak güncellenmiş sözdizimi küçük Görünüm Denetleyicileri.

İlgili konular