У меня есть табличное представление с кнопками на программно сгенерированных ячейках для создания меню для моего приложения, но я хочу, чтобы кнопка на каждой ячейке переходила на другой контроллер представления. Это код для генерации ячеек.
import UIKit
class MenuViewController: UIViewController, SwitchView {
let titles: [String] = ["Previous Issues", "Bookmarks", "Settings", "Website", "About"]
let images: [UIImage] = [#imageLiteral(resourceName: "newspaper.png"),#imageLiteral(resourceName: "bookmark-outline.png"),#imageLiteral(resourceName: "settings.png"),#imageLiteral(resourceName: "outside-page.png"),#imageLiteral(resourceName: "info.png")]
var menuItems: [menuItem] = []
public var index: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
menuItems = createMenu()
}
override func viewDidAppear(_ animated: Bool) {
}
func switchView(index: Int){
NSLog("THIS CODE IS RUNNING")
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Settings")
self.present(newViewController, animated: true, completion: nil)
}
func createMenu() -> [menuItem]{
var index: Int = 0
for (i,image) in zip(titles, images) {
menuItems.append(menuItem(labelText: i, picture: image, index: index))
index += 1
}
return menuItems
}
}
extension MenuViewController: UITableViewDataSource, UITabBarDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menuItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
tableView.rowHeight = 90
tableView.separatorStyle = .singleLine
let item = menuItems[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuCell") as! MenuCell
cell.setAttributes(item: item)
return cell
}
}
Это мой код MenuCell
import UIKit
protocol SwitchView {
func switchView(index: Int)
}
class MenuCell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var picture: UIImageView!
var index: Int = 0
var delegate: SwitchView?
func setAttributes(item: menuItem) {
label.text = item.labelText
picture.image = item.picture
index = item.index
}
@IBAction func button(_ sender: Any) {
delegate?.switchView(index: index)
NSLog("BUTTON")
}
}
Код работает нормально без ошибок, но когда я нажимаю на кнопки моей таблицы, метод switchView () внутри моего класса MenuViewController не работает, но код кнопки работает. Я что-то упустил?
P.S. Код для выбора представляемого контроллера представления не запущен, на данный момент я просто пытаюсь отобразить контроллер представления настроек при нажатии кнопки на MenuCell.