【问题标题】:Custom iOS UITabBarController Delegate Triggers viewDidLoad自定义 iOS UITabBarController 委托触发器 viewDidLoad
【发布时间】:2016-08-12 12:54:37
【问题描述】:

问题:

UITabBarController 委托方法调用 viewDidLoad 并否定/忽略屏幕选择。

背景:

我正在为 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 的原因。委托是否重置视图?

谢谢

【问题讨论】:

  • 你到底想要什么?无法正确理解问题?
  • 我希望委托方法显示正确的 viewController,而不是每次收到委托消息时都调用 viewDidLoad 方法。 viewDidLoad 将 selectedIndex 重置为 0。

标签: ios objective-c delegates uitabbarcontroller


【解决方案1】:

是的,viewdidload 每次都会调用,因为您正在再次初始化选项卡。 setSelectedIndex 初始化 tabbarcontroller evrytime 来自 UITabbarcontroller 类。您不应该在 uitabbarcontroller 类中这样做。只需初始化 tabbarcontroller 一次。

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

希望这会奏效。

【讨论】:

  • 解决方案是将viewControllers放在containerView中,然后用按钮的segues交换视图。目标是组织视图,tabBarController 似乎是一种可能性。感谢您的帮助。
猜你喜欢
  • 2018-11-13
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多