在 Swift 中以编程方式调用 UITabBarController 委托
Calling UITabBarController delegate programmatically in Swift
我在 Objective-C 中有一个完美的工作代码,它被调用以根据特定条件以编程方式更改所选选项卡。
-(void)loadNewView
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
[tabBarController setSelectedIndex:2];
[tabBarController.delegate tabBarController:tabBarController didSelectViewController:[tabBarController.viewControllers objectAtIndex:2]];
}
我正在尝试在 Swift 中获取相同的内容,下面是我尝试过的代码
func loadNewView() {
var tabbarController: UITabBarController = self.window?.rootViewController as UITabBarController
tabbarController.selectedIndex = 2
var svc = tabbarController.viewControllers[2] as UINavigationController
tabbarController.delegate?.tabBarController(tabbarController, didSelectViewController:svc)
}
但是我收到“[AnyObject]? 没有名为下标的成员”。我知道上面的 Swift 代码有问题,但是有人可以帮助我理解错误吗?
是的,[AnyObject]?,它是一个可选数组,没有名为下标的成员,但 [AnyObject] 有,即您不能在可选数组上使用下标表示法,因此您必须解包它首先带有“!”。
试试这个:
var svc = tabbarController.viewControllers![2] as UINavigationController
我在 Objective-C 中有一个完美的工作代码,它被调用以根据特定条件以编程方式更改所选选项卡。
-(void)loadNewView
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
[tabBarController setSelectedIndex:2];
[tabBarController.delegate tabBarController:tabBarController didSelectViewController:[tabBarController.viewControllers objectAtIndex:2]];
}
我正在尝试在 Swift 中获取相同的内容,下面是我尝试过的代码
func loadNewView() {
var tabbarController: UITabBarController = self.window?.rootViewController as UITabBarController
tabbarController.selectedIndex = 2
var svc = tabbarController.viewControllers[2] as UINavigationController
tabbarController.delegate?.tabBarController(tabbarController, didSelectViewController:svc)
}
但是我收到“[AnyObject]? 没有名为下标的成员”。我知道上面的 Swift 代码有问题,但是有人可以帮助我理解错误吗?
是的,[AnyObject]?,它是一个可选数组,没有名为下标的成员,但 [AnyObject] 有,即您不能在可选数组上使用下标表示法,因此您必须解包它首先带有“!”。
试试这个:
var svc = tabbarController.viewControllers![2] as UINavigationController