我是新手。我确信我已经错过了一些非常基本的东西。我正在尝试在我的视图中初始化PickerView,由于某种原因,该列表未显示。当我单击选择器时也没有任何反应。我想念什么?

奇怪的是,为什么PickerView's没有像ID'sLabel这样的TextView

ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

这是ViewController代码

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!


编辑2

我试图将OutLet拖放到ViewController。由于某种原因,我现在得到Exception


  查看右上方的图片,您会在视图中看到delegate和'datasource'。这个可以吗 ?


ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

** 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)


编辑2

我现在已经将选择器正确连接到View Controller

ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

但是我认为我的pickerView仍未正确连接。请注意下图,我猜测圆圈上应该标有一个胖点。正如我所说,从选择器到ViewController.swift的拖放操作不起作用。

编辑4

我必须重新启动Xcode,并在StoryBoard中提及ViewController名称。然后,我可以将这2件事从我的情节提要板中拖放一个IBOutlet到视图控制器。带有FAT DOT的圆终于连接到了我的ViewController中。

ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

最佳答案

单击助手编辑器按钮,并确保情节提要在左侧窗格中,并且ViewController.swift在右侧。
  
  然后按住控件并单击情节提要中的UIPickerView元素,然后将鼠标拖到右侧。将其放在类ViewController之间,并覆盖func viewDidLoad。


ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP


  将会弹出一个小对话框,询问您该IBOutlet属性的名称。只需将其命名为“ picker”即可。


ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP


  之后,您的ViewController.swift文件将如下所示:


ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP


  在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'


回答:这意味着您的选择器视图未正确连接到当前班级。

错误的连接

您已连接查看

ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

正确的一个是您需要与文件所有者建立联系

ios - Swift UIPickerView什么都不显示,没有操作,没有列表-LMLPHP

关于ios - Swift UIPickerView什么都不显示,没有操作,没有列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42672075/

10-11 14:34
查看更多