自定义 iOS UITabBarController 委托触发器 viewDidLoad

Custom iOS UITabBarController Delegate Triggers viewDidLoad

问题:

UITabBarController 委托方法调用 viewDidLoad 和 negates/ignores 屏幕选择。

背景:

我正在为小 iOS 屏幕制作分屏视图控制器。所以,到目前为止,屏幕看起来像这样:

Custom Split-View Controller

对于详细视图 (RS),我使用的是 UITabBarController,删除了 TabBar。您可以找到此 here 的代码。

用户选择左侧的按钮,委托将按钮的标签 ID 发送到 UITabBarController 委托方法。

委托方法如下所示:

// delegate method in subclass of UITabBarController
-(void) screenSelected:(int)screenNum
{
    NSLog(@"delegate arrived: %d", screenNum);
    self.selectedIndex = screenNum;
    // code goes to viewDidLoad
}

有了断点,我确定屏幕实际上并没有改变。

如果改为从 UITabBarController viewDidLoad 方法调用此 screenSelected 方法(当应用程序首次打开时),该方法工作正常并且 selectedIndex 按预期更改。

我想弄清楚委托触发 viewDidLoad 的原因。委托是否重置视图?

谢谢

是的,viewdidload 每次都会调用,因为您正在重新初始化选项卡。 setSelectedIndex 从 UITabbarcontroller class 初始化 tabbarcontroller evrytime。你不应该从 uitabbarcontroller class 开始这样做。只需初始化 tabbarcontroller 一次。

你不应该这样使用 tabbarcontroller。根据您的要求,您不需要使用标签栏,只需在单击按钮时显示 viewController

希望这会奏效。