TimOliver / TOPasscodeViewController

A modal passcode input and validation view controller for iOS
MIT License
387 stars 96 forks source link

Setting rightAccessoryButton won't remove cancelButton #3

Open bretdabaker opened 7 years ago

bretdabaker commented 7 years ago

Hardware / Software

Which version of the library were you using? Answer: 0.0.1

Which version of iOS are you running? Answer: iOS 11

What model of iOS device were you testing on? Answer: Simulator

If using CocoaPods, which version of CocoaPods are you on? Answer: not related

Goals

What is the outcome result you want to achieve with this library? Answer: We want to add a simple passcode lock when our app is launched and or enters background, we need to remove the cancel button because the passcode is not optional.

Expected Results

What did you expect to happen? Setting rightAccessoryButton will remove the cancel button.

Actual Results

Setting rightAccessoryButton did not remove the cancel button.

Investigation

Currently the initialization flow is:

-initWithStyle:passcodeType
|_ -setUp
   |_ -view
      |_ -loadView
      |_ -viewDidLoad
         |_  -setUpAccessoryButtons

The problem begins with line 82: self.view.backgroundColor = [UIColor clearColor];. self.view triggers -loadView and in turn -viewDidLoad where the heavy view set up takes place. Then when -setUpAccessoryButton is called at line 175, the if statement is always true because it's called before the user has a chance to set rightAccessoryButton. Setting it after initialization has no effect because the logic is under -viewDidLoad.

In general calling self.view in -init should be avoided.

TimOliver commented 6 years ago

Hi @bretdabaker! Thanks for the detailed issue!

Ah you're right. That's definitely a bug being caused by some of my terrible coding practices. Sorry about that!

I just made a new push to master that moves the code triggering loadView to viewDidLoad. HOPEFULLY that solved the problem for you. Let me know! Thanks!