ios - Protocol for adjusting UINavigationController -


in every 1 of view controllers i'm calling function edits appearance of navigation controller , text of left/right buttons. instead of having code in every view controller, i'm trying implement protocol each view controller conforms to.

current code in every view controller:

func setupnavreg(backbuttontext: string, nextbuttontext: string) {     self.navigationcontroller!.navigationbar.bartintcolor = uicolor.whitecolor()     self.navigationcontroller?.navigationbar.setbackgroundimage(uiimage(), forbarmetrics: uibarmetrics.default)      let leftnavbutton = uibarbuttonitem(title: backbuttontext, style: .plain, target: self, action: selector("backbuttonpressed"))     let customfont = uifont(name: "gill sans", size: 14.0)      leftnavbutton.settitletextattributes([nsfontattributename:customfont!], forstate: uicontrolstate.normal)     self.navigationitem.leftbarbuttonitem = leftnavbutton      //nextbutton left out      } 

protocol design

protocol navbarinterface {     var navigationcontroller: uinavigationcontroller? { }     func configurewithbackbutton(backbuttontext: string, nextbuttontext: string) }  extension navbarinterface {     func configurewithbackbutton(backbuttontext: string, nextbuttontext: string) {      if let navigationcontroller = navigationcontroller {         navigationcontroller.navigationbar.bartintcolor = uicolor.whitecolor()         navigationcontroller.navigationbar.setbackgroundimage(uiimage(), forbarmetrics: uibarmetrics.default)         navigationcontroller.navigationbar.shadowimage = uiimage()         let customfont = uifont(name: "gill sans", size: 14.0)          let leftnavbutton = uibarbuttonitem(title: backbuttontext, style: .plain, target: nil, action: selector("backbuttonpressed"))         leftnavbutton.tintcolor = uicolor.whitecolor()         leftnavbutton.settitletextattributes([nsfontattributename:customfont!], forstate: uicontrolstate.normal)         navigationcontroller.navigationitem.leftbarbuttonitem = leftnavbutton            //nextbutton left out          }     } } 

so far, i'm unable work. appearance of navigation controller isn't changing see protocol break points i've set getting hit when view controller appears. i'm concerned i'm not going able hit selector functions when nav buttons pressed.

if protocol applies uinavigationcontroller's, forget protocol , define extension on uinavigationcontroller:

extension uinavigationcontroller {      func configurewithbackbutton(backbuttontext: string, nextbuttontext: string) {         self.navigationbar.bartintcolor = uicolor.whitecolor()         self.navigationbar.setbackgroundimage(uiimage(), forbarmetrics: uibarmetrics.default)         self.navigationbar.shadowimage = uiimage()         let customfont = uifont(name: "gill sans", size: 14.0)          let leftnavbutton = uibarbuttonitem(title: "back", style: .plain, target: nil, action: selector("backbuttonpressed"))         leftnavbutton.tintcolor = uicolor.whitecolor()         leftnavbutton.settitletextattributes([nsfontattributename:customfont!], forstate: uicontrolstate.normal)         self.navigationitem.leftbarbuttonitem = leftnavbutton            //nextbutton left out      } } 

i because protocols interact in funky ways classes , subclasses - i.e., happens if class defines method, protocol defines well, etc. try extending class , see if solves problem.

i noticed code different - in original method, setupnavreg, set text of button backbuttontext, in extension set "back". intentional? may why text isn't changing whatever string passing method...


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -