Тип принадлежности набора ячеек Swift TableView

#swift #uitableview #cell #accessorytype

#swift #uitableview #ячейка #accessorytype

Вопрос:

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

    }
}
  

Моя проблема в том, что accessoryType и selectionStyle не меняются.
TableView.separatorStyle изменяется так же, как и cell.textlabel.text.
Как я могу это исправить?

Комментарии:

1. Примечание: tableView:cellForRowAtIndexPath: вероятно, это не подходящее место для настройки tableView.separatorStyle . Я бы переместил эту строку кода viewWillAppear или даже попытался установить ее в построителе интерфейса (у меня нет доступа к последней версии Xcode, поэтому я не могу быстро попробовать).

Ответ №1:

UITableViewCell.selectionStyle.синий

При выборе цвет фона ячейки задается по умолчанию.

В iOS 7 цвет выбора больше не синий. Используйте UITableViewCell.Стиль выбора.вместо этого используется значение по умолчанию.

Что касается accessoryType , он должен работать нормально, если вы не измените его позже где-нибудь еще. Убедитесь, что ширина таблицы указана правильно, иначе дополнительные виды могут быть за кадром.

 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 = UITableView.CellSelectionStyle.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 = UITableViewCell.AccessoryType.none
        cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator
        cell.accessoryType = UITableViewCell.AccessoryType.detailDisclosureButton
        cell.accessoryType = UITableViewCell.AccessoryType.checkmark
        cell.accessoryType = UITableViewCell.AccessoryType.detailButton

        // Custom view options
        cell.accessoryType = UITableViewCell.AccessoryType.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)!")

    }
}
  

Обратите внимание, что не является хорошим решением устанавливать separatorStyle таблицу каждый раз, когда запрашивается ячейка, вместо этого делайте это один раз при tableView загрузке: at viewDidLoad .

Комментарии:

1. Я хочу изменить тип аксессуара. Как я могу это изменить? (и где?)

2. Вы можете выбрать любой вариант, доступный в UITableViewCellAccessoryType перечислении. Если вам нужен пользовательский вид аксессуаров, выберите свойство . accessoryView UITableViewCell

3. Должен ли я создавать класс для ячейки?

4. я делаю в этом коде, но accessoryType не меняется

5. @Nicholas это скорее общее решение, чем мое, то же самое касается «интерактивного» вспомогательного представления: для стандартного типа DetailDisclosureButton вам нужно будет реализовать метод делегирования - tableView:accessoryButtonTappedForRowWithIndexPath: , для пользовательских дополнительных представлений (тех, которые вы инициализируете и добавляете самостоятельно) вы должны использовать соответствующие инструменты в зависимости от типа элемента управления.

Ответ №2:

Мне не повезло установить его в cellForRowAtIndexPath методе, переместив его, чтобы willDisplayCell устранить проблему, из-за которой он не отображался.

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

Ответ №3:

Я хотел бы поделиться своим опытом по этому поводу, у меня была такая же проблема, cell.accessoryType = IUTableViewCellAccessoryType.Checkmark и я заметил, что мой tableview не имеет ограничений, поэтому я добавил недостающие ограничения, и тогда это сработало для меня

Ответ №4:

Ниже будет установлен ваш accessoryView в виде значка с именем «sentIcon». На всякий случай!!!

         let sentImage = UIImage(named: "sentIcon")
        let sentImageView = UIImageView(image: sentImage)
        sentImageView.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        sentImageView.tintColor = .lightGray
        cell.accessoryView = sentImageView