如何使用带有presentViewController的后退按钮?

时间:2013-12-26 23:20:09

标签: ios objective-c xcode

这是我调用包含在UINavigationController中的新视图控制器的代码。我想在restaurantResults控制器上有一个简单的后退按钮。我的选择器似乎不起作用。我尝试过使用pop命令。这些工作是否可以使用presentViewController,而不是任何类型的推送?

非常确定我的选择器现在是错的,因为它说的是self.navigationController,它可能不对。

这是我调用新视图控制器并设置后退按钮的地方:

 - (void)searchBarSearchButtonClicked:(UISearchBar *)foodNearSearchBar
{

 restaurantsViewController *restaurantResults = [[restaurantsViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:restaurantResults];


    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                                   style:UIBarButtonItemStyleBordered
                                                                  target:nil
                                                                  action:@selector(backPressed:)];

    restaurantResults.navigationItem.leftBarButtonItem = backButton;


    [self presentViewController:navController animated:YES completion:Nil];

}

这是我的选择器:

   -(void)backPressed: (id)sender
{
    [self.navigationController popViewControllerAnimated: YES]; // or popToRoot... if required.
}

我也尝试过:

 - (void)backPressed:(id)sender
    {
        [self dismissViewControllerAnimated:YES completion:nil];
    };

3 个答案:

答案 0 :(得分:2)

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                        style:UIBarButtonItemStyleBordered
                                                       target:nil
                                                        ction:@selector(backPressed:)];

restaurantResults.navigationItem.leftBarButtonItem = backButton;

这些代码应该在restaurantsViewController上使用; 目标是自我。

答案 1 :(得分:0)

//这有效-做到了 //您可以在要查看后退按钮的视图中创建后退按钮-

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Login"
                                                               style:UIBarButtonItemStylePlain
                                                              target:self
                                                              action:@selector(backPressed:)];

self.navigationItem.leftBarButtonItem = backButton;

[self.navigationItem setHidesBackButton:NO];

//只需在后退按钮所在的viewcontroller中关闭视图控制器-如下-

- (void)backPressed:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:nil];
};

答案 2 :(得分:0)

如果您使用的是UINavigationController,并且想要默认的iOS后退按钮,则无需以编程方式进行设置。实际上没有什么可添加的,它是默认内置的。

通过将推入导航控制器,将其放置在导航控制器的控制器堆栈中,因此iOS将在您浏览导航时添加导航栏和后退按钮堆栈。

如果它不起作用,请检查以下内容:

  • 您要从中推送的控制器是UINavigationController的根。您可以通过代码或情节提要中进行设置。 (没关系)

  • 您是从导航控制器而不是视图控制器推送的。从本质上讲,您必须执行navigationcontroller.push()而不是self.push(),否则它将不起作用。 (取决于self在这里,但是我很确定您的错误在这里)

我看到您使用的是presentViewController模态,如果这是您的意图,那很好,但是如果您想要导航堆栈,为什么不将self嵌入到导航器中首先,隐藏其导航栏,然后将您的下一个控制器推入即可。

那样,您不必手动创建后退按钮,而让iOS处理所有事情。

如果必须那样操作,则只能在“展示”时“关闭”,而在“按下”时“弹出”。但是我没有足够的信息来知道您的为什么不起作用。尝试一些事情,并给我们更多反馈。但是从我看来,您正在寻找比必要的更复杂的解决方案。

我也真的会从一个简单的按钮说“关闭”开始,然后在尝试将其嵌入到带有项目的栏中之前,看看它是否能以这种方式工作。这样一来,您就可以解决一个问题,一次解决一个新概念