2016-06-13 2 views
-1

私はインターフェイスビルダーでラベルとピッカーを持つように設計したカスタムUITableViewCellを持っています。実装の迅速なファイルには、ラベルとピッカーを参照する2つのアウトレットを追加しました。出口は、UI要素にフックアップし、コードはこのコンセントは常にカスタムではありませんUITableViewCell

class TitlePickerCell: UITableViewCell 
{ 

    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var picker: UIPickerView! 

    override func awakeFromNib() 
    { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) 
    { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

} 

のように見えます私は私がこのセルを使用したいのUITableViewControllerを持っています。私は設定を表示するためにそれを使用しているので、私は静的に設定し、セルの数は決してプログラム的に変更されません。自分のカスタムセルの1つをテーブルビューに追加し、識別子をMediaStyleCellに設定します。その後

、のUITableViewControllerのための私の迅速なファイルで、私は私のviewDidLoad関数に

TitlePickerCellが.xibファイルの名前で、MediaStyleCellは私がして、細胞を与えた識別子である
self.settingsTable.registerNib(UINib.init(nibName: "TitlePickerCell", bundle: nil), forCellReuseIdentifier: "MediaStyleCell") 

をこの行を追加します。インタフェースビルダー。私のアプリケーションを実行すると、私のカスタムセルクラスのラベルとピッカーがゼロであるため、クラッシュします。

答えて

-1

カスタムUITableViewCellを作成することは、これについて間違った方法です。単にセルスタイルをカスタムに設定し、UI要素を追加するだけで何をすべきかがわかります。

+0

カスタムテーブルセルが必要な場合は、ものを作る必要があります。私は説明したシナリオを設定して、セルが表示されます。答えとしてコードを追加します - .xibファイルに識別子を設定したことをもう一度確認しましたか? –

1

出口は実際に接続されていることを確認してください:

はXIBファイルを開き、右上側に、コンセントのメニューに移動します。 コンセントをそこに接続します。コンセントが正しくリンクされていない場合、私はこれが起こることをするために考えることができます

outlets connection

1

唯一の理由があり、間違ったペン先/識別子が登録されているか、.xibファイル内の再利用識別子が欠落している/間違いました。

ここでは、再現することができませんが、私が使用VCのコードは次のとおりです。私はちょうどそれが最初だった青のcos製(

class CustomTableViewCell: UITableViewCell { 

    @IBOutlet var titleLabel: UILabel! 

    @IBOutlet var pickerView: UIPickerView! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     titleLabel.text = "Works" 
     pickerView.backgroundColor = UIColor.blueColor() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 

} 

と私は、この素敵な醜い細胞を得る:ここ

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.registerNib(UINib.init(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "DifferentIdentifier") 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

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

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

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

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 44 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("DifferentIdentifier", forIndexPath: indexPath) as! CustomTableViewCell 
     cell.titleLabel.text = "HERPITY" 
     return cell 
    } 
} 

は細胞でオートコンプリート)

enter image description here

+0

**サイドノート - UIPickerViewをテーブルセルに配置しないでください。ビューコントローラ(または一般的な外部コントローラ)は、ピッカービューを持ち、デリゲート/データソースメソッドを実装し、現在編集中のセルに基づいて異なるデータを提供する必要があります。コントローラーはセルの編集を開始するように指示するだけで、1つのピッカービューを入力ビューとして割り当てることができます –

関連する問題