Either with a subclass or with the help of a delegate, you can simply check whether the item you have selected is selected, and if so, in the tab bar, select the item that was previously selected, and then present your model view controller. Since you will be doing this in the same RunLoop source that the original selection has occurred, the tab selection will be effectively canceled without switching to the average VC.
source share