Factory methods use instancetype for return type instead of id
Weak delegate instead of assign
Added actionBlock to allow other simple behavior for the control action instead of the delegate method where a view controller must be provided to be presented