自定义 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
。
希望这会奏效。
问题:
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
。
希望这会奏效。