代码之家  ›  专栏  ›  技术社区  ›  bugfixr

将按钮添加到我的视图“标题/标题”栏

  •  0
  • bugfixr  · 技术社区  · 15 年前

    在AppDelegate中,我动态创建UITabBarController和UINavigationController。然后添加3个视图。

    // Prepare the tab bar controller   
    tabBarController = [[UITabBarController alloc] init];
    
    // Switch controller
    UserSettingsController *settingsController = [[UserSettingsController alloc] init];
    
    // Switches controller
    SwitchesController *switchesController = [[SwitchesController alloc] init];
    
    // Help controller
    HelpController *helpController = [[HelpController alloc] init];
    
    NSArray *controllers = [NSArray arrayWithObjects: switchesController, settingsController, helpController, nil];
    tabBarController.viewControllers = controllers; 
    
    if (self.navigationController == nil) {
        self.navigationController = [[UINavigationController alloc] initWithRootViewController:tabBarController];
    }
    
    [window addSubview:navigationController.view];
    

    当我最初这样做时,我注意到我现在在页面的顶部有一个标题/标题栏。它是空白的,真的只是占用了空间。不过,我想利用它,并在我的一个视图中添加一个“刷新”按钮。

    在我感兴趣的视图中,我尝试了以下操作:

    -(void)viewDidLoad {
        [super viewDidLoad];
    
        UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithTitle:@"Refresh" style:UIBarButtonItemStylePlain target:self action:@selector(refreshSwitches:)];
        self.navigationItem.rightBarButtonItem = refresh;
        [refresh release];
    }
    
    -(void)refresh{
        ...
    }
    

    没有纽扣出现,所以我要么就走了,要么就丢了什么东西。

    有什么建议吗?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  0
  •   Sam    15 年前

    我认为问题在于,您添加到选项卡栏控制器的视图控制器没有被导航控制器封装。尽管UITabBarController有一个导航控制器,但这并没有隐式地给出它的所有选项卡导航控制器(如果没有导航控制器,视图控制器的 navigationItem 不会做任何事情。)要解决此问题,我建议在初始化时用导航控制器封装视图控制器:

    前任:

    UserSettingsController *settingsController = [[UserSettingsController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settingsController];
    [settingsController release];
    
    // etc...
    
    NSArray *controllers = [NSArray arrayWithObjects:navController, ..., ..., nil];
    tabBarController.viewControllers = controllers;
    
    // Release your nav controllers, other cleanup
    

    编辑

    好吧,我想我现在对你的设置有了更好的了解。我能让以下工作:

    self.tabBarController.navigationItem.rightBarButtonItem = myButton;
    

    其中一个重要的警告是,除非您显式地删除按钮,否则该按钮将一直存在于tabbarcontroller的所有视图中。这可能会被证明是恼人的/不雅的维护,但我不确定另一个解决方案,如果你想拥有的视图按钮不是直接关联到导航控制器本身。

    推荐文章