2017-04-06 6 views
0

私は速くて新しく、セグを実行した後にすべてのテーブルビューセルを選択解除する問題を抱えています。今、トップセルを除いて、セグを実行すると、すべてのセルが強調表示されたままになります。一番上のものも選択可能であり、セグを実行しますが、ハイライトはまったくありません。スウィフト - テーブルビューのセルが強調表示されない - トップ1を除く - 何も問題なし

これは奇妙な動作ですが、私はすべての基本を試しました。

私は

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

tableView.deselectRow(at: indexPath, animated: true) 
} 

を試してみた私はセグエ法の準備でそれをも試してみた

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if let selectionIndexPath = self.tableView.indexPathForSelectedRow { 
     self.tableView.deselectRow(at: selectionIndexPath, animated: animated) 
    } 
} 

を試してみました。

私はまた、細胞からそれを試してみた:cell.selectionStyle = .none

私も誰にも負けないストーリーボードで「選択」を変更しようとしました。

何も動作を変更していないので、私は迷っています。私はどこかに何かを混乱させて、それが何かを見つけることができないと思う。

誰かが見たいと思えば、ここに私のtableviewクラスがあります。あなたのcellForRowAt

import UIKit 
import Firebase 



class DraftListCell : UITableViewCell { 

@IBOutlet weak var playerName: UILabel! 
@IBOutlet weak var playerPrice: UILabel! 
@IBOutlet weak var priceRemaining: UILabel! 
@IBOutlet weak var vsLabel: UILabel! 
@IBOutlet weak var injuredLabel: UILabel! 
@IBOutlet weak var gameTimeLabel: UILabel! 

} 


class NBADraftList: UIViewController, UITableViewDelegate,  UITableViewDataSource, FIRDatabaseReferenceable{ 

@IBOutlet var tableView: UITableView! 

let cellReuseIdentifier = "cell" 

var ref: FIRDatabaseReference! 
var players = [Player]() 

let formatter = NumberFormatter() 



override func viewDidLoad() { 


    let leftBarButton = UIBarButtonItem(title: "Cancel", style:  UIBarButtonItemStyle.plain, target: self, action:  #selector(myLeftSideBarButtonItemTapped(_:))) 

    self.title = "Select" 

    self.navigationItem.leftBarButtonItem = leftBarButton 

    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier) 
    self.tableView.rowHeight = 100.0 
    self.tableView.tableFooterView = UIView() 

    tableView.delegate = self 
    tableView.dataSource = self 

    formatter.numberStyle = .currency 
    formatter.maximumFractionDigits = 0 


    ref = FIRDatabase.database().reference().child("NBATodaysPlayers") 

    ref.observeSingleEvent(of: .value, with: { (snapshot) in 

     var players = [Player]() 
     for player in snapshot.children { 

      players.append(Player(snapshot: player as! FIRDataSnapshot)) 

     } 
     self.players = players.sorted(by: { $0.Value > $1.Value }) 
     self.tableView.reloadData() 

    }) { (error) in 
     print("error") 

    } 

     super.viewDidLoad() 
} 



func myLeftSideBarButtonItemTapped(_ sender:UIBarButtonItem!) 
{ 
    self.dismiss(animated: true, completion: nil) 
} 


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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "DraftListCell", for: indexPath as IndexPath) as! DraftListCell 



    if let formattedPrice = formatter.string(from: players[indexPath.row].Value as NSNumber) { 
     cell.playerPrice.text = "Game Price: \(formattedPrice)" 
    } 

    if let formattedRemainingPrice = formatter.string(from: 10000 - players[indexPath.row].Value as NSNumber) { 
     cell.priceRemaining.text = "Remaining: \(formattedRemainingPrice)" 
    } 

      cell.playerName.text = players[indexPath.row].Name 
      cell.injuredLabel.text = players[indexPath.row].Inj 
      cell.vsLabel.text = players[indexPath.row].visiting + " @ " + players[indexPath.row].home 
      cell.gameTimeLabel.text = players[indexPath.row].game_time 
      cell.textLabel?.textColor = .white 
      cell.backgroundColor = .black 



      return UITableViewCell() 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    self.performSegue(withIdentifier: "BuyStats", sender: indexPath); 
} 





override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "BuyStats" { 

     let buyStats = segue.destination as! BuyStats 

     if let indexPath = tableView.indexPathForSelectedRow { 

      let player = players[indexPath.row] 

      buyStats.selectedPlayer = player 



     } 
    } 


} 

}

答えて

1

以下を追加します。

if cell.isSelected == true { 
    tableView.deselectRow(at: indexPath, animated: false) 
} 

それとも、セグエにより特異的にこれを実行したい場合に。あなたは、のは、それがcellForRowAt

ホープ本当ならば、これは

+0

こんにちはinokeyを助けdeselectAllを言うと、チェックしてみましょうグローバル変数を設定することができます助けてくれてありがとう。私の問題は少し違っていた。私はcellForRowAtIndexから汎用のUITableViewCell()を返していました。私は再利用可能な "セル"を返すべきだった。私はこれを修正し、問題はなくなった。 –

+0

これが問題なら、この質問を閉じる必要があります@DarkhorseFantasySports –

関連する問題