React Native中如何在不改变路由的情况下改变NavigatorIOS的标题

Posted

技术标签:

【中文标题】React Native中如何在不改变路由的情况下改变NavigatorIOS的标题【英文标题】:How to change the title of the NavigatorIOS without changing the route in React Native 【发布时间】:2015-06-14 13:31:55 【问题描述】:

我的应用中有一个 Navigatorios 和 TabBarIOS。我想在选择选项卡时更改当前路线的标题。

第一种方法不行

在创建 NavigatorIOS 时,我在 state 对象中使用了一个变量,但更新状态并没有改变标题。 (即使再次调用渲染)

onTabChanged: function (title) 
  this.setState(
    selectedTab: title,
  );
,

render() 
  return (
    <NavigatorIOS
    ...
    initialRoute=
      component: Tabs,
      title: this.state.selectedTab,
      passProps: 
        onTabChanged: this.onTabChanged
      
    
    />
  );
,

第二种方法无效

我还尝试更新我称为 nav 的 NavigatorIOS 的状态。在 NavigatorIOS 的 state 中有一个 routeStack 对象,它保存了一个路由项数组。所以我通过 NavigatorIOS 的 setState 更新了数组,但也没有用。

第三种没用的方法

我尝试将标题从 Objective C 更改为 Native Module,但我无法从 NSObject 访问特定的导航栏。

希望有人能帮忙。

【问题讨论】:

不。我不能。我打算用 Navigator 替换 NavigatorIOS,但我现在不从事那个项目。导航器更灵活。 【参考方案1】:

我认为您应该能够使用 navigator.replace 执行此操作,但目前标题的替换似乎已被破坏:

https://github.com/facebook/react-native/issues/476

【讨论】:

【参考方案2】:
var route = this.props.navigator.navigationContext.currentRoute;
route.title = "newTitle";
route.rightButtonTitle = "newRightButtonTitle",
route.onRightButtonPress = () => 
    ;
;
this.props.navigator.replace(route);

顺便说一句,您也可以通过以下代码更改 NavigatorIOS 的 tintColor...

var app = React.createClass(
    getInitialState: function() 
      return 
          shadowHidden: false,
          barTintColor: '#f04f46',
          titleTextColor: '#fff',
          tintColor: '#fff',
      
    ,
    _navigator : function(navigatorProps)
      this.setState(navigatorProps);
    ,
    render: function()
        return <NavigatorIOS ref='nav' style=styles.container
          shadowHidden=this.state.shadowHidden
          barTintColor=this.state.barTintColor
          titleTextColor=this.state.titleTextColor
          tintColor=this.state.tintColor
          translucent=false
          initialRoute=
            title: title,
            component: component,
            passProps: Object.assign(
              navigatorHook: this._navigator,
            , this.props),
           
        />;
    
);

现在,在下一个组件中

this.props.navigatorHook(tintColor: 'red');

【讨论】:

以上是关于React Native中如何在不改变路由的情况下改变NavigatorIOS的标题的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 React Native 中的堆栈导航器的情况下重定向到页面?

在不使用 xcode react-native 的情况下更改设备

如何在不使用 React Native 中的状态的情况下验证 TextInput 值?

React Native的原生路由

在 Kotlin Native 中,如何在不使用 C 指针的情况下将对象保留在单独的线程中,并从任何其他线程中改变其状态?

如何在不改变位置的情况下调整同一行中的两个 React 日期选择器