2017-03-08 5 views
0

Ich bin ein Neuling in Swift. Ich bin mir sicher, dass ich etwas wirklich Grundlegendes verpasst habe. Ich versuche eine PickerView aus meiner Sicht zu initialisieren, aus irgendeinem Grund wird die Liste nicht angezeigt. Nichts passiert, wenn ich auch auf den Picker klicke. Was vermisse ich ?Swift PickerView zeigt nichts, keine Aktion keine Liste

Seltsamer warum nicht PickerView's haben ID's wie Label oder ein TextView

enter image description here

Hier ist der Viewcontroller Code

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    var pickerView = UIPickerView() 
    var pickerDataSource = ["White", "Red", "Green", "Blue"]; 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Initialization for Country Code pickerView 
     pickerView.dataSource = self 
     pickerView.delegate = self 
     pickerView.isHidden = false 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // Methods for Country Code pickerView 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return pickerDataSource.count; 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return pickerDataSource[row] 
    } 
} 

EDIT

ich, dass ich erkannte, hatte das IBOutlet fehlt. Um es hinzuzufügen, befolgte ich die Anweisungen unten. Aber jetzt, wenn ich ziehe und versuche, in meine Viewcontroller Drop-Popup nie angezeigt wird.

Auch habe ich diese Zeile manuell hinzugefügt, immer noch es nicht funktioniert.

@IBOutlet weak var picker: UIPickerView! 

EDIT 2

Ich versuchte, den Ausgang zum Viewcontroller ziehen fallen. Aus irgendeinem Grund bin ich jetzt Exception

Überprüfen Sie das Bild unten rechts oben bekommen, werden Sie delegate und ‚datasource` auf die Ansicht bemerken. Ist das ok ?

enter image description here

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView numberOfComponentsInPickerView:]: unrecognized selector sent to instance 0x7faa3a40a900' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010dce8d4b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000010d74a21e objc_exception_throw + 48 
    2 CoreFoundation      0x000000010dd58f04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
    3 CoreFoundation      0x000000010dc6e005 ___forwarding___ + 1013 
    4 CoreFoundation      0x000000010dc6db88 _CF_forwarding_prep_0 + 120 
    5 UIKit        0x000000010e0ec20f -[UIPickerView _delegateNumberOfComponents] + 56 
    6 UIKit        0x000000010e0eb33b -[UIPickerView _updateSelectedRows] + 91 
    7 UIKit        0x000000010e0eb40a -[UIPickerView didMoveToWindow] + 102 
    8 UIKit        0x000000010e1cb256 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 1799 
    9 UIKit        0x000000010e1cae82 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 819 
    10 UIKit        0x000000010e1cae82 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 819 
    11 UIKit        0x000000010e1bdfea __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 151 
    12 UIKit        0x000000010e1bded8 -[UIView(Hierarchy) _postMovedFromSuperview:] + 857 
    13 UIKit        0x000000010e1cde56 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1982 
    14 UIKit        0x000000010e1bc0d7 -[UIView(Hierarchy) addSubview:] + 838 
    15 UIKit        0x000000010e5d0fdb -[UINavigationTransitionView transition:fromView:toView:] + 645 
    16 UIKit        0x000000010e2f095b -[UINavigationController _startTransition:fromViewController:toViewController:] + 3314 
    17 UIKit        0x000000010e2f0ef9 -[UINavigationController _startDeferredTransitionIfNeeded:] + 874 
    18 UIKit        0x000000010e2f1fdb -[UINavigationController __viewWillLayoutSubviews] + 58 
    19 UIKit        0x000000010e4e8dd7 -[UILayoutContainerView layoutSubviews] + 223 
    20 UIKit        0x000000010e1d1ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 
    21 QuartzCore       0x000000011368bbf8 -[CALayer layoutSublayers] + 146 
    22 QuartzCore       0x000000011367f440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    23 QuartzCore       0x000000011367f2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    24 QuartzCore       0x000000011360d318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 
    25 QuartzCore       0x000000011363a3ff _ZN2CA11Transaction6commitEv + 475 
    26 QuartzCore       0x000000011363ad6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 
    27 CoreFoundation      0x000000010dc8d267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    28 CoreFoundation      0x000000010dc8d1d7 __CFRunLoopDoObservers + 391 
    29 CoreFoundation      0x000000010dc718a6 CFRunLoopRunSpecific + 454 
    30 UIKit        0x000000010e106aea -[UIApplication _run] + 434 
    31 UIKit        0x000000010e10cc68 UIApplicationMain + 159 
    32 BuzTransit       0x000000010cdb5bbf main + 111 
    33 libdyld.dylib      0x0000000114ce368d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

EDIT 2

ich meine Picker auf die View Controller jetzt korrekt angeschlossen haben.

enter image description here

Aber ich denke, meine pickerView ist noch nicht richtig angeschlossen. Beachten Sie das Bild unten, ich vermute, dass der Kreis mit einem fetten Punkt markiert werden sollte. Wie ich schon sagte der Drag Drop von Picker zu ViewController.swift funktioniert einfach nicht.

EDIT 4

Ich hatte Xcode neu zu starten und die Viewcontroller Namen meinen Storyboard zu erwähnen. Diese 2 Dinge, die ich dann ziehen konnte, lassen ein IBOutlet von meinem Storyboard auf den View-Controller fallen. Und der Kreis mit einem FAT DOT ist endlich in meinem ViewController verbunden.

enter image description here

+0

erstellen IBOutlet für die UIPickerView anschließen müssen . –

+0

sind Sie die Pickerview im Programm erstellt –

+0

@ Anbu.Karthik Nein, ich habe nicht die PickerView programmgesteuert erstellt, zog ich es und legte es auf dem Storyboard. – Siddharth

Antwort

3

den Assistant Editor Schaltfläche klicken und sicherstellen, dass das Storyboard im linken Fensterbereich ist und dass ViewController.swift ist in der rechten Seite.

Halten Sie dann die Steuerung gedrückt und klicken Sie auf das UIPickerView-Element im Storyboard und ziehen Sie die Maus über die rechte Seite. Fügen Sie es zwischen der ViewController-Klasse und der override-Funktion viewDidLoad ein.

enter image description here

Ein kleiner Dialog erscheint, dass Sie für diese IBOutlet Eigenschaft für einen Namen zu fragen. Nenne es einfach "Picker".

enter image description here

Danach tun, wird Ihre ViewController.swift Datei wie folgt aussehen:

enter image description here

In ViewController.swift, den folgenden Code hinzu.

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

    @IBOutlet weak var picker: UIPickerView! 

var pickerDataSource: [String] = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    // Connect data: 
    self.picker.delegate = self 
    self.picker.dataSource = self 

    // Input data into the Array: 
    pickerDataSource = ["White", "Red", "Green", "Blue"] 
} 

dann die Datenquelle verbinden und

// Methods for Country Code pickerView 
func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return pickerDataSource.count; 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return pickerDataSource[row] 
} 

für Probe delegieren können Sie die tutorial here

Update den Status Fehler erhalten

** App beenden wegen zu abgefangene Ausnahme ‚NSInvalidArgumentException‘, Grund: ‚- [UIView numberOfComponentsInPickerView:]: Unbekannter Selektor an Instanz gesendet 0x7faa3a40a900‘

Am: es bedeutet, dass Ihre Kommissionierer im Hinblick auf Ihre aktuelle Klasse nicht richtig angeschlossen.

falsche Verbindung

Sie verbunden sind

enter image description here

richtige zu sehen ist, dass Sie mit Ihren Dateien Besitzer in Storyboard

enter image description here

+0

Ich klicke auf den "Cntrl" Button und ziehe Drop, eine blaue Linie erscheint, aber dieses Popup erscheint nicht. – Siddharth

+0

@Siddharth - schließlich müssen Sie die Verbindungstaste drücken –

+0

"connect" -Taste? – Siddharth