![](/img/trans.png)
[英]Created TabbarController in Storyboard can't change view programmatically
[英]Programmatically Selecting a TabBarController View?
为了启动和运行我的自定义菜单,我最终使用了UITabBarController
并且需要更改以编程方式显示的视图,而不是屏幕上的标准选项卡式菜单。
一切都按预期进行,除了在事情上。 我正在尝试使用:
[self setSelectedIndex:index];
这段代码在自定义委托方法的UITabBarController
子类中。 (因此,我可以在与菜单交互时以编程方式调整视图)。 但是,在调用此代码时,它没有执行任何操作吗?
是否必须从选项卡式视图之一调用它? 我希望从TabBarController内部运行它,以避免在每个选项卡式子控制器中重复代码。
更新:
刚刚发现使用[self setSelectedIndex:index];
在viewDidLoad
工作正常。 但是当在委托方法中调用它时,它不会更改视图。 它正在使用正确的索引号并被调用,但没有使用该方法执行任何操作。
此外,它似乎标签控制器是一个不同的对象,当我登录self
在viewDidLoad
VS我的委托方法。 那么,为什么我会丢失对原始控制器的引用?
它只是另一个视图控制器中容器中的UITabBarController。
代表代码:
@接口
@protocol SLMenuDelegate <NSObject>
@required -(void)menuDidChangeViewToIndex:(NSInteger)index;
@end
@property (nonatomic, assign) id<SLMenuDelegate>menuDelegate;
@实施
@synthesize menuDelegate;
self.menuDelegate = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarViewController"];
[menuDelegate menuDidChangeViewToIndex:[self.menuItemButtons indexOfObject:sender]];
UITabBarController
-(void)menuDidChangeViewToIndex:(NSInteger)index
{
[self setSelectedIndex:index];
}
设置断点并运行NSLogs,毫无疑问,该方法将被调用并且所有代码都将运行。
尝试使用延迟的性能:
dispatch_async(dispatch_get_main_queue(), ^{
[self setSelectedIndex:index];
});
我没有设法找到确切问题的解决方案,但是我找到了一种简单地解决问题的同样好的方法。
我不再使用委托来发送按钮点击消息并更改视图。 相反,我做了以下工作:
SLTabBarViewController *tabBar = [self.childViewControllers objectAtIndex:0];
[tabBar setSelectedIndex:[self.menuItemButtons indexOfObject:sender]];
这样就获得了嵌入式选项卡栏控制器,我只需直接从按钮点击来自的原始视图控制器中更改视图即可。
它可能不是一个智能解决方案,但它是一种简单实用的解决方案,不会产生任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.