ios - Why I can't call a method stored in parent UIViewController from embedded UITableViewController? -
i have parent ui view controller , has method responsible printing data console:
func printsomedata() { print("printing data") } it has container embedded uitableviewcontroller. table has pull refresh functionality implemented , prints string when user pulls table:
func refresh(refreshcontrol: uirefreshcontrol) { print("refreshing!!") refreshcontrol.endrefreshing() } now want call printsomedata refresh method.
this try:
parent uiviewcontroller:
class mainmenu: uiviewcontroller, printing{ func printsomedata() { print("some date") } } embedded uitableviewcontroller:
protocol printing{ func printsomedata() } class mainmenutableviewcontroller: uitableviewcontroller { var delegate: printing? func refresh(refreshcontrol: uirefreshcontrol) { print("refreshing!!") if let _ = delegate{ delegate?.printsomedata() } refreshcontrol.endrefreshing() } but when pull table see refreshing!!, there no way see printing data. doing wrong?
where assigning delegate?
and write optional method call single line
delegate?.printsomedata() or that:
if self.delegate != nil { self.delegate!.printsomedata() } inside mainmenu
override func viewdidload() { super.viewdidload() // tableviewcontroller placeholder `mainmenutableviewcontroller` reference tableviewcontroller.delegate = self } if have understand correctly , mainmenu has containerview mainmenutableviewcontroller should solve problem:
class mainmenu: uiviewcontroller, printer { func printsomedata() { print("some date") } } protocol printer { func printsomedata() } class mainmenutableviewcontroller: uitableviewcontroller { var printer: printer? { guard let printer = self.parentviewcontroller as? printer else { return nil } return printer } func refresh(refreshcontrol: uirefreshcontrol) { print("refreshing!!") printer?.printsomedata() refreshcontrol.endrefreshing() } }
Comments
Post a Comment