2014-06-17 17 views
14
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet 
    var tableView: UITableView 
    var items: String[] = ["We", "Heart", "Swift"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell") 
    } 


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

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

     var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell 

     cell.textLabel.text = self.items[indexPath.row] 
     cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton 
     cell.selectionStyle = UITableViewCellSelectionStyle.Blue 
     tableView.separatorStyle = UITableViewCellSeparatorStyle.None 
     return cell 
    } 

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
     println("You selected cell #\(indexPath.row)!") 

    } 
} 

mio problema è che l'accessoryType e il selectionStyle non vengono modificate. La tabellaView.separatorStyle viene modificata così come cell.textlabel.text. Come posso risolvere il problema?cellule Swift tableView impostare il tipo di accessorio

+0

Nota: 'tableView: cellForRowAtIndexPath:' probabilmente non è il posto giusto per l'impostazione di 'tableView.separatorStyle'. Sposterei quella riga di codice a 'viewWillAppear', o proverei anche ad impostarla nel builder dell'interfaccia (non ho accesso all'ultimo Xcode, quindi non posso provarlo velocemente). – dasblinkenlight

risposta

21

UITableViewCellSelectionStyleBlue

La cella ha un colore di sfondo predefinito quando selezionato.

In iOS 7, il colore di selezione non è più blu. Utilizzare invece UITableViewCellSelectionStyleDefault.

Per quanto riguarda lo accessoryType, dovrebbe funzionare bene fino a quando non lo si cambia più tardi da qualche altra parte. Assicurati che la larghezza della tabella sia corretta, altrimenti le viste accessorie potrebbero essere off-screen.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet 
    var tableView: UITableView 

    var items: String[] = ["We", "Heart", "Swift"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell") 
    } 


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

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

     var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell 
     cell.textLabel.text = self.items[indexPath.row] 
     cell.selectionStyle = UITableViewCellSelectionStyle.Blue 

     /* 
     enum UITableViewCellAccessoryType : Int { 
     case None // don't show any accessory view 
     case DisclosureIndicator // regular chevron. doesn't track 
     case DetailDisclosureButton // info button w/ chevron. tracks 
     case Checkmark // checkmark. doesn't track 
     case DetailButton // info button. tracks 
     } 
     */ 

     // Standard options 
     cell.accessoryType = UITableViewCellAccessoryType.None 
     cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator 
     cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton 
     cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
     cell.accessoryType = UITableViewCellAccessoryType.DetailButton 

     // Custom view options 
     cell.accessoryType = UITableViewCellAccessoryType.None 
     cell.accessoryView = UIView(frame: CGRectMake(0, 0, 20, 20)) 
     cell.accessoryView.backgroundColor = UIColor.blueColor() 

     return cell 
    } 

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
     println("You selected cell #\(indexPath.row)!") 

    } 
} 

Nota che non è una buona soluzione per impostare separatorStyle del tavolo ogni volta che viene richiesta la cellula, invece farlo una volta quando viene caricato il tableView: a viewDidLoad.

+0

Voglio cambiare il tipo di accessorio. Come posso cambiarlo? (e dove?) – user3748930

+0

È possibile scegliere qualsiasi opzione disponibile nell'enumerazione 'UITableViewCellAccessoryType'. Se vuoi una vista accessoria personalizzata, dai un'occhiata alla proprietà 'accessoryView' di' UITableViewCell'. –

+0

Devo creare una classe per la cella? – user3748930

1

vorrei condividere la mia esperienza su questo, ho avuto lo stesso problema, cell.accessoryType = IUTableViewCellAccessoryType.Checkmark E ho notato la mia Tableview non aveva vincoli, così ho aggiunto vincoli manca poi ha funzionato per me

6

I didn' t avere la fortuna di impostarlo nel metodo cellForRowAtIndexPath, spostandolo a willDisplayCell risolto il problema con esso non viene visualizzato.

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    cell.accessoryType = .DisclosureIndicator 
}