2014-06-17 3 views
14

Mein Problem ist, dass der AccessoryType und der selectionStyle nicht geändert werden. Der tableView.separatorStyle wird ebenso wie der cell.textlabel.text geändert. Wie kann ich das beheben?Swift tableView Zellensatz Zubehörtyp

+0

Hinweis: 'tableView: cellForRowAtIndexPath:' ist wahrscheinlich nicht der richtige Ort für 'tableView.separatorStyle'. Ich würde diese Codezeile nach 'viewWillAppear' verschieben oder es sogar im Interface Builder einstellen (ich habe keinen Zugriff auf den neuesten Xcode, also kann ich es nicht schnell versuchen). – dasblinkenlight

Antwort

21

UITableViewCellSelectionStyleBlue

Die Zelle verfügt über eine Hintergrundfarbe Standard wenn ausgewählt.

In iOS 7 ist die Auswahlfarbe nicht mehr blau. Verwenden Sie stattdessen UITableViewCellSelectionStyleDefault.

Wie für die accessoryType, sollte es gut funktionieren, solange Sie es später woanders nicht ändern. Stellen Sie sicher, dass die Tabellenbreite korrekt ist, andernfalls können Zubehöransichten nicht angezeigt werden.

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)!") 

    } 
} 

Beachten Sie, dass es keine gute Lösung ist es einmal gesetzt separatorStyle der Tabelle jedes Mal, wenn die Zelle angefordert wird, anstatt tun, wenn die tableView geladen wird: bei viewDidLoad.

+0

Ich möchte den Zubehörtyp ändern. Wie kann ich es ändern? (und wo?) – user3748930

+0

Sie können jede Option auswählen, die in der Enumeration 'UITableViewCellAccessoryType' verfügbar ist. Wenn Sie eine benutzerdefinierte Zubehöransicht wünschen, wählen Sie die Eigenschaft 'accessoryView' von' UITableViewCell' aus. –

+0

Muss ich eine Klasse für die Zelle erstellen? – user3748930

1

Ich mag würde meine Erfahrung darüber teilen, ich hatte das gleiche Problem, cell.accessoryType = IUTableViewCellAccessoryType.Checkmark Und ich merkte, dass mein Tableview nicht Zwänge hatte, so dass ich hinzugefügt Constraints dann funktionierte es für mich fehlt

6

I didn‘ Ich habe Glück, wenn ich es in der cellForRowAtIndexPath Methode einstelle und es auf willDisplayCell verschiebe, behob das Problem damit nicht angezeigt.