#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