如何在Dismiss之后以编程方式更改UITabBar选定的索引?

时间:2017-06-12 03:44:19

标签: ios swift uikit uitabbarcontroller uitabbar

我在UIViewController上有一个模态UITabBarViewcontroller,我想解雇它,然后更改标签栏的所选项目。

我正在尝试通过设置selectedIndex内部关闭'完成来完成它:

self.dismiss(animated: true, completion: {
    self.tabBarController?.selectedIndex = 2        
})

如果这是一个新手问题,我道歉,我无法在任何地方找到解决方案。提前感谢您发给我的每个答案,线索或旧的类似问题:)

3 个答案:

答案 0 :(得分:2)

我能够通过在解除之前保存presentingViewController(调用模态segue的视图控制器)的引用来解决此问题,然后使用它在完成内部设置selectedIndex。像这样:

let referenceForTabBarController = self.presentingViewController as! UITabBarController
self.dismiss(animated: true, completion:{ 
     referenceForTabBarController.selectedIndex = 2
})

答案 1 :(得分:1)

在取消View Controller后执行完成块。这意味着您的视图不再显示在屏幕上。因此,您需要在完成块中创建新实例

import React from 'react'
import { PropTypes } from 'prop-types'
import { Icon, Dropdown } from 'semantic-ui-react'
import FormLabel from '../FormLabel'

export const ReduxFormDropdown = ({
  input,
  label,
  placeholder,
  meta: {
    error,
    touched,
  },
  ...custom
}) => {
  const errorMessage = (
    <div style={{ color: '#E20000', paddingTop: '.3rem', fontSize: '12px' }} >
      <Icon name="warning" />
      {error}
    </div>
  )

  return (
    <div>
      <FormLabel>{label}</FormLabel>
      <Dropdown
        placeholder={placeholder}
        value={input.value}
        onChange={(param, data) => props.input.onChange(data.value)}
        error={touched && error}
        selection
        {...input}
        {...custom}
      />
      {touched && error && errorMessage}
    </div>
  )
}

ReduxFormDropdown.propTypes = {
  input: PropTypes.object.isRequired,
  label: PropTypes.string,
  placeholder: PropTypes.string,
  meta: PropTypes.shape({
    touched: PropTypes.bool,
    error: PropTypes.string,
  }),
}

答案 2 :(得分:0)

如果您想将代码置于按钮操作中,或者为表视图或集合视图选择了选择项-Swift 4.2

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let tabBarController = appDelegate.window?.rootViewController as! UITabBarController
tabBarController.selectedIndex = 2