2015-08-03 5 views
1

Я пытаюсь создать простой UITableView, в котором есть кнопка, прикрепленная к правой стороне каждой ячейки. Я добавил кнопку в ячейку прототипа в своем раскадровке и установил ограничения, чтобы AutoLayout взял на себя и поместил ее в нужное место. Когда я перехожу к просмотру макета в редакторе помощников, все выглядит великолепно. Однако, как только я запускаю симулятор и перехожу к этому виду, кнопки больше нет (ячейка пуста).Swift XCode - Изменения в раскадровке не отражаются в симуляторе iPhone

У меня возникла аналогичная проблема, когда я попытался добавить индикатор раскрытия информации, и он не появился - чтобы исправить это, мне пришлось добавить этот аксессуар программно. Разве это не вопрос раскадровки, чтобы помочь вносить изменения без использования кода? Я по-прежнему новичок в этом и буду признателен за некоторые рекомендации.

EDIT: Часть кода в соответствии с просьбой (извините):

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = UITableViewCell() 

    let addButton = UIButton() 

    let menuItem = currentOrder?.getSortedMenuItems()[indexPath.row] 
    let itemPrice = "\(currentOrder!.menu[menuItem!]!)" 

    cell.textLabel!.text = menuItem! + " - " + itemPrice 
    return cell 
} 

Большая часть кода в есть довольно несущественными, но, как вы можете видеть, что я пытался добавить кнопку, а затем остановился, потому что я не был уверен, куда идти оттуда. У меня создалось впечатление, что все это можно сделать с помощью раскадровки.

+0

Прикрепите код, который есть в вашей ячейкеForRowAtIndexPath function –

+0

@AndriyGordiychuk done – Niko

+0

Проблема есть.Дайте мне 5 минут –

ответ

1

Проблема, возникшая из-за того, что вы НЕ используете ячейки, созданные в раскадровке. Когда вы звоните:

let cell = UITableViewCell() 

он создает ячейку со стилем по умолчанию. Вместо этого вы должны использовать ячейки, созданные в раскадровке.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCellWithIdentifier("cellWithSwitch") as! UITableViewCell 

// setup your cells (e.g. update its title) 

return cell 

}

Вы должны изменить «cellWithSwitch» к идентификатору, который вы установили для ячейки в раскадровке.

Вы можете найти идентификатор вашей ячейки, выбрав его в раскадровку, а затем проверять данные в инспекторе Атрибуты:

enter image description here

Если вы еще не установили этот идентификатор - установить его, а затем используй это. И тогда изменения, внесенные в раскадровке будут отражены по телефону;)

Extra

Часто бывает необходимо, чтобы подклассы вашу клетку, чтобы сделать его легче работать. Вот пример:

class MyCell:UITableViewCell { 

    @IBOutlet var myButton: UIButton! 

} 

Теперь, вы должны сделать 3 другие вещи:

1) Выберите ячейку в раскадровке и установить свой класс MyCell в инспекторе идентичности (это третья закладка в изображение, которое я отправил)

2) Открыть Connections инспектор (последняя вкладка) и подключите myButton выход

3) Изменить ваш cellForRowAtIndexPathFunction:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
let cell = tableView.dequeueReusableCellWithIdentifier("cellWithSwitch") as! MyCell 

// setup your cells (e.g. update its title) 

// you can now access your button as cell.myButton 

return cell 
} 
+0

Это может быть глупый вопрос, но как я могу получить доступ к этой кнопке внутри кода? Есть ли способ получить элемент UI в ячейке, называя его, подобно тому, что вы сделали, чтобы получить ячейку? – Niko

+0

Дайте мне 10 минут. Я обновлю свой ответ, чтобы показать, как вы можете удалить ячейку с помощью специального класса;) –

+0

Проверьте бит в конце под названием Extra –

Смежные вопросы