У меня есть пользовательская ячейка, содержащая в себе кнопку, я хочу показать лист действий при нажатии кнопки, но, как вы знаете, UITableViewCell не имеет метода «presentViewController», так что мне делать?показ листа действия в пользовательской ячейке в Swift
1
A
ответ
2
В быстром файле вашей пользовательской ячейки, написать протокол сообразуйтесь вашим viewContoller,
// your custom cell's swift file
protocol CustomCellDelegate {
func showActionSheet()
}
class CustomTableViewCell : UITableViewCell {
var delegate: CustomCellDelegate?
// This is the method you need to call when button is tapped.
@IBAction func buttonTapped() {
// When the button is pressed, buttonTapped method will send message to cell's delegate to call showActionSheet method.
if let delegate = self.delegate {
delegate.showActionSheet()
}
}
}
// Your tableViewController
// it should conform the protocol CustomCellDelegate
class MyTableViewController : UITableViewController, CustomCellDelegate {
// other code
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellReuseIdentifier", forIndexPath: indexPath)
// configure cell
cell.delegate = self
return cell
}
// implement delegate method
func showActionSheet() {
// show action sheet
}
}
Убедитесь, что контроллер представления соответствует протоколу CustomCellDelegate и реализует метод showActionSheet().
Назначить свой viewContoller как делегат пользовательской ячейки при создании ваших ячеек в методе dataSource cellForRowAtIndexPath.
Вы можете представить свой новый контроллер вида из метода showActionSheet в viewController.
0
Это, как вы могли бы сделать это:
- Создать протокол о ваших клиентах
UITableViewCell
сказатьMyTableViewCellDelegate
. - Добавьте способ
cellButtonTapped
в свой протокол. - Подключите контроллер вида (который использует эти ячейки) к
MyTableViewCellDelegate
, т. Е. В файле заголовка добавьте<MyTableViewCellDelegate>
. - В вашем представлении метод
cellForRowAtIndexPath:
контроллера, при инициализации ячейки, присваивает себя как делегат. - В своем классе сокета класса таблицы, когда кнопка нажата, передайте управление его делегату, который является вашим контроллером представления.
- Внесите метод
cellButtonTapped
в ваш контроллер и настоящий лист действий, как вам нравится.
Есть ли учебник, объясняющий, о чем вы говорите? Я знаю протоколы, но я не знаю, как это использовать. –
Возможно, есть несколько уроков, но вместо этого я отредактировал ответ. Я надеюсь, что это будет полезно – buhanserdar