web-dev-qa-db-ja.com

Swiftを使用したUITableView

MyTapCell1.Swift

これはカスタムUITableViewCell View

import UIKit

class TapCell1: UITableViewCell
{
    @IBOutlet var labelText : UILabel

    init(style: UITableViewCellStyle, reuseIdentifier: String!)
    {
        println("Ente")
        super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
    }

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

        super.setSelected(selected, animated: animated)
    }
}

ViewController.Swift

そのすべてのデータソースとデリゲートは正しく設定されていますが、カスタムセルが表示されていません。

import UIKit

class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
    {
        @IBOutlet var label: UILabel

        @IBOutlet var tableView : UITableView

        var getvalue = NSString()

        override func viewDidLoad()
        {
            super.viewDidLoad()

            label.text="HELLO GOLD"

            println("hello : \(getvalue)")
            self.tableView.registerClass(TapCell1.self, forCellReuseIdentifier: "Cell")
        }

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

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

        func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
        {
            var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TapCell1
            cell.labelText.text="Cell Text"
            return cell
        }

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

問題は、カスタムセルが表示されないことです。私が間違ったことを何か提案してください。

注:ここに私のコード マイファイルダウンロードリンク

24
PREMKUMAR

やっとやった。

TapCell1.Swiftの場合

import UIKit

class TapCell1: UITableViewCell {

    @IBOutlet var labelTitle: UILabel

    init(style: UITableViewCellStyle, reuseIdentifier: String!) {
        super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
    }
}

NextViewController.Swiftの場合

import UIKit

class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var tableView: UITableView

    var ListArray=NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        let nibName = UINib(nibName: "TapCell1", bundle:nil)
        self.tableView.registerNib(nibName, forCellReuseIdentifier: "Cell")

        for i in 0...70 {
            ListArray .addObject("Content: \(i)")
        }
    }


    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int)->Int {
       return ListArray.count
    }

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

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

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TapCell1

        //cell.titleLabel.text = "\(ListArray.objectAtIndex(indexPath.item))"

        cell.labelTitle.text = "\(ListArray.objectAtIndex(indexPath.row))"

        return cell
    }
}

私の作業コードのリンク: CUSTOMISED TABLE

47
PREMKUMAR

セルのclassを登録する必要があります。そのためには、このコード行を

self.tableView.registerClass(TapCell1.classForCoder(), forCellReuseIdentifier: "Cell")

編集

あなたのコードは問題ないようです

//cell.labelText.text="Cell Text"

cell.textLabel.text="Cell Text"   // use like this
9
Anil Varghese

解決策は、セルの高さを次のように手動で設定することである可能性が最も高くなります。

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

Xcode beta 6のバグだと思います。

3
Micah

これで、カスタムUITableViewCellが機能するようになりました。

で動作します

  • Xcode 6ベータ6で実行
  • Xcode 6ベータ5で実行

  • iOSは7.1

どうやって

  • セルの「.xib」ファイルを作成しました。
  • ストーリーボードにコピーします。
  • ストーリーボードを介して、識別子を付けます。
  • 私はそれがtableviewのサブ子であることを確認します

この方法で行うと、クラス/ペン先などを登録する必要はありません。

これは私のカスタムセルです。

 import UIKit 
 
 class TestCell:UITableViewCell {
 
 @IBOutlet var titleImageView:UIImageView!
 @IBOutlet var titleLabel:UILabel !
 
 init(style:UITableViewCellStyle、reuseIdentifier:String!){
 super.init(style:style、reuseIdentifier:reuseIdentifier)
} 
 
 override func awakeFromNib(){
 super.awakeFromNib()
 //初期化コード
} 
 
 init required (コーダーaDecoder:NSCoder){
 super.init(coder:aDecoder)
} 
} 

ビュー内、または「UITableViewDataSource」を拡張する場所。 「cell2」が、ストーリーボードを介して指定した「識別子」と同じであることを確認してください。

 func tableView(tableView:UITableView !, cellForRowAtIndexPath indexPath:NSIndexPath!)-> UITableViewCell! {
 
 var cell:TestCell = tableView.dequeueReusableCellWithIdentifier( "cell2"、forIndexPath:indexPath)as TestCell 
 
 //カスタム要素の使用例。
 cell.titleLabel.text = self.items [indexPath.row] 
 
 var topImage = UIImage(named: "fv.png")
 cell.titleImageView。 image = topImage 
 
 return cell 
} 

itableviewcell

1
thefreshteapot

次のコードを試してください

var cell:CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("CustomTableViewCell") as CustomTableViewCell

https://github.com/iappvk/TableView-Swift

0
Vijay

Storyboardを使用していない場合は、UITableViewCellのサブクラスとして新しいファイルを作成し、カスタムセルを設定した後に「xibファイルも作成する」チェックボックスをオンにします。これがtableviewのコードです。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
   {

    var customcell:CustomTableViewCellClass? = tableView.dequeueReusableCellWithIdentifier("cell") as? CustomTableViewCellClass
    if  (customcell==nil)
    {
        var nib:NSArray=NSBundle.mainBundle().loadNibNamed("CustomTableViewCellClass", owner: self, options: nil)

        customcell = nib.objectAtIndex(0) as? CustomTableViewCell
    }

    return customcell!


}
0
guru

次のコードを試してください:

var cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellTableView") as? CustomCellTableView
0
Soumya Soni

ストーリーボードをチェックしてセルを選択し、「選択したクラスのIDインスペクタを見て、CustomClassを入力し、MODULEがプロジェクト名を入力します。

私はこれを行いました完全に動作しますこのヒントを試してエラーを回避し、以下の画像とコードを確認してください

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {

 // let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)

  //  cell.textLabel.text = array[indexPath!.row] as String

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTableViewCell

    cell.nameLabel.text = array[indexPath!.row] as String
    cell.RestaurentView.image = UIImage(named:images[indexPath!.row])

    return cell
}
0
Quad

NSObjectの拡張

extension NSObject {    
    var name: String {
        return String(describing: type(of: self))
    } 
    class var name: String {
        return String(describing: self)
    }
}

カスタムUITableViewCellのプロパティ

class var nib: UINib {
    return UINib(nibName:YourTableViewCell.name, bundle: nil)
}
class var idetifier: String {
    return YourTableViewCell.name
}

IViewControllerに追加

self.tableView.registerNib(YourTableViewCell.nib, forCellReuseIdentifier: YourTableViewCell.idetifier)

let cell = tableView.dequeueReusableCellWithIdentifier(YourTableViewCell.idetifier, forIndexPath: indexPath) as! YourTableViewCell
0
Rakesh Kunwar