2017-03-08 97 views
0

我是一个快捷方式的新手。我相信我错过了一些非常基本的东西。我试图在我看来初始化一个PickerView,由于某种原因列表不显示。当我点击选取器时也没有任何反应。我错过了什么?Swift PickerView不显示任何内容,没有任何操作没有列表

奇怪的是,为什么不PickerView'sID'sLabelTextView

enter image description here

这里是视图控制器代码

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] 
    } 
} 

编辑

我意识到,我没有IBOutlet。要添加它,我遵循下面的说明。但是,现在如果我拖动并尝试放入我的Viewcontroller弹出窗口不显示。

另外,我手动添加了这一行,但它仍然不起作用。

@IBOutlet weak var picker: UIPickerView! 

EDIT 2

我试图拖出口下降到ViewController。出于某种原因,我现在越来越Exception

检查以下右上方图片,你会发现delegate和“datasource`到视图。这个可以吗 ?

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

我已连接我的选择器的View Controller正确了。

enter image description here

但我觉得我的pickerView仍然没有正确连接。注意下面的图片,我猜测圆圈应该用一个胖点标记。正如我所说的从选取器拖到ViewController.swift只是不起作用。

EDIT 4

我不得不重新启动Xcode和提及的ViewController的名字我的故事板。这两件事我可以拖放一个IBOutlet从我的故事板到视图控制器。最后,我的ViewController中连接了一个FAT DOT的圆圈。

enter image description here

+0

为UIPickerView在故事板创建IBOutlet中。 –

+0

你是以编程方式创建pickerview的 –

+0

@ Anbu.Karthik不,我没有以编程方式创建PickerView,我将它拖放到故事板上。 – Siddharth

回答

3

点击助理编辑按钮,并确保该故事板是在左窗格中和ViewController.swift是正确的。

然后按住control并单击故事板中的UIPickerView元素,然后将鼠标拖到右侧。将它放在类ViewController和重载func viewDidLoad之间。

enter image description here

一个小对话框会弹出来问你这个IBOutlet中属性的名称。只是将其命名为“选择器”。

enter image description here

这样做之后,你的ViewController.swift文件将是这样的:

enter image description here

在ViewController.swift,添加以下代码。

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"] 
} 

然后连接数据源和委托

// 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] 
} 

样品就可以得到tutorial here

更新错误状态

**终止,由于应用程序未捕获的异常“NSInvalidArgumentException”,原因是:“ - [UIView的numberOfComponentsInPickerView:]:无法识别的选择发送到实例0x7faa3a40a900”

答:这意味着没有正确连接到当前类的选择器视图。

连接错误

你是连接查看

enter image description here

正确的是你需要与你的文件的所有者连接

enter image description here

+0

我点击“Cntrl”按钮并拖放,出现一条蓝线,但该弹出窗口不出现。 – Siddharth

+0

@Siddharth - 终于你需要按连接按钮 –

+0

“连接”按钮? – Siddharth

相关问题