2017-04-20 2 views
0

私は問題が簡単だと思うが、私はそれを行う方法を見つけることができません: 私はUIViewControllerの中にUITableViewを持っています。 tableViewに50個のセルがあるとしましょう。だから問題はどうすれば上から(例えば)3番目のセルのインスタンスを得ることができるかということです。たとえば、3番目のセルの背景色を上から変更するだけです。 私のコードは次のようになります。uitableviewの特定の行のインスタンスを取得

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) 

    cell.textLabel?.text = dataArray[indexPath.row] 

    if indexPath.row == 3 { 
     cell.backgroundColor = UIColor.init(white: 0.9, alpha: 1) 
    } 

    return cell 
} 

私は、細胞がデキューので、このコードは動作しません知っています。

+0

http://stackoverflow.com/questions/12228953/ get-uitableviewcell-from-u itableview-with-cellforrowatindexpath – janusbalatbat

+0

その特定のセルを常にハイライト表示しますか? – Joe

+0

はい。問題は、上下にスクロールしているセルがデキューしているときです。たとえば、16番目のセルが強調表示されているなどです...しかし、1つのセル、1番目または3番目の2番目のセルだけが必要です...問題ありません) – makedonskii

答えて

0

cellforrowAtindexpathで色を変更する場合:アウトサイドであれば

if indexPath.row == 3 { 
     cell.backgroundColor = UIColor(white: 0.4, alpha: 1) 
    } else { 
     //reset your cell to default so dequeue will work correctly 
    } 

/**************/ その関数その後、

セルをtableView.cellForRow(at:IndexPath(行:3、セクション:0)) cell.backgroundColor = UIColor(白:0.4、アルファベット:1)

+0

'else'ステートメントが動作します。君たちありがとう。 – makedonskii

+0

@ajjjjjjjjうわー、あなたは文字通り私の答えをコピーして貼り付けました... – rmp

-1

あなたは、画面の上から三分の一をしたい意味ならば、Jは=ちょうどあなたがのtableViewで第三のセルをしたい意味ならば、あなたのコードは、ほぼ正しいvisibleCells

let cell = tableView.visibleCells[2] 

を使用しています。最初のセルは、あなたはあなたがさまざまな方法で第三のセルの色を変更することができtableView.reloadRows

tableView.reloadRows(at: [IndexPath(row: 2, section: 0)], with: .automatic) 
+0

私は達成したいと思う目標を理解していないかもしれません。そのコードは機能しません。私は '私はこのインスタンスを取得することができますいつ、どこで、私は知らない'( ':IndexPath(行:3、セクション:0)') ''を呼び出す必要があると思う ' – makedonskii

1

を呼ぶような変更をトリガするには、行0であるため、3番目のセルには、行2です。

この場合、同じオブジェクトをデキューする他のセルの背景をリセットするには、elseブロックがありません。

1

あなたのコードは正しく、あなたはelseケースを考慮する必要があります。その後、

if indexPath.row == 3 { 
    cell.backgroundColor = UIColor(white: 0.9, alpha: 1) 
} else { 
    //reset your cell to default so dequeue will work correctly 
} 
+0

ありがとう。私はあなたの提案を試みます – makedonskii

関連する問題