Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 手动设置UITabBar选定项目时遇到问题_Ios_Swift - Fatal编程技术网

Ios 手动设置UITabBar选定项目时遇到问题

Ios 手动设置UITabBar选定项目时遇到问题,ios,swift,Ios,Swift,我正在视图控制器中实现一个自定义的uitabar。我成功地将uitabar委托设置为UIViewController 但是,在viewDidLoad上,我希望使用以下选项选择UITabBar的第一项: tabBar.selectedItem = tabBar.items[0] as UITabBarItem 但我一直遇到这个错误 (UITabBar, didSelectItem: UITabBarItem) -> ()' does not have a member named 'se

我正在视图控制器中实现一个自定义的
uitabar
。我成功地将
uitabar
委托设置为
UIViewController

但是,在viewDidLoad上,我希望使用以下选项选择UITabBar的第一项:

tabBar.selectedItem = tabBar.items[0] as UITabBarItem 
但我一直遇到这个错误

(UITabBar, didSelectItem: UITabBarItem) -> ()' does not have a member named 'selectedItem'
这是我的密码:

class ViewController: UIViewController, UITabBarDelegate {
    @IBOutlet var tabBar : UITabBar!
    @IBOutlet var placeHolderView : UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        tabBar.selectedItem = tabBar.items[0] as UITabBarItem
        switchView(0)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
        switch item.tag {
        case 0:
            switchView(0)
            break
        case 1:
           switchView(1)
           break
        default:
            break
        }
    }

    ...
}
更新:

让这个工作:

tabBar.selectedItem = tabBar.items![0] as? UITabBarItem

我仍然需要了解optionals…

我发现这个解决方案很有效:

override func viewDidLoad() {
    super.viewDidLoad()
    for i in tabBar.items as [UITabBarItem]){
      if i.tag == 0 {
        tabBar.selectedItem = i
        break;
      }
    }
    switchView(0)
 }

我认为问题在于uitabar.items是可选的,因此需要将其展开才能访问阵列

tabBar.selectedItem = tabBar.items![0] as UITabBarItem

非常感谢。然而,我仍然很好奇为什么我最初的努力没有奏效。我认为你必须访问项目的
标记
属性,而不是你所做的。谢谢你。这也行得通,但我得到了警告:将对“uitabaritem”的强制向下转换视为可选将永远不会产生“nil”,并用以下命令修复:tabBar.selectedItem=tabBar.items![0]作为?uitabaritemany当您在一个对象上看到“没有一个名为的成员”时,您非常确定它确实存在,首先要检查的是您是否真的在处理一个可选的。