【问题标题】:Implementing A Home button in SWReavealViewController在 SWRavealViewController 中实现 Home 按钮
【发布时间】:2015-10-29 04:54:11
【问题描述】:

我正在使用 SWRevealViewController 并且单元格的内容之一称为“主页”。其余内容转到另一个 VieController,但 Home 按钮应将 App 带到第一个 ViewController。我试过了

[self.navigationController popToViewController:viewC animated:YES];

(viewC是第一个ViewController)我也试过了

[self.navigationController popToRootViewControllerAnimated:YES];

两者都不起作用。有 SWRevealViewController 经验的人可以帮忙吗? 第一个视图控制器是 RevealViewController 的 sw_front,而单元格(“HOME”)所在的表视图位于 sw_rear。 First ViewController 是应用打开时出现的第一个页面

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
_rowSelected=(int)indexPath.row;
if (_rowSelected==0) {
    ViewController *viewC;
    [self performSegueWithIdentifier:@"toHome" sender:self];
    [self.navigationController popViewControllerAnimated:YES];
    [self.navigationController pushViewController:viewC animated:YES];
}
[self performSegueWithIdentifier:@"sideBarSegue" sender:self];
}

我在这里分别尝试了所有 3 种方法,但都没有奏效

[self performSegueWithIdentifier:@"toHome" sender:self];
    [self.navigationController popViewControllerAnimated:YES];
    [self.navigationController pushViewController:viewC animated:YES];

这部分是一个“else”案例,它重定向到另一个工作正常的 ViewController

[self performSegueWithIdentifier:@"sideBarSegue" sender:self];

【问题讨论】:

  • 什么是第一个视图控制器?它是您启动应用程序时的第一个前视图控制器吗?每次都是动态的吗?提供更多细节。另外,这个“单元”在哪里,哪个视图控制器?您可能需要提供屏幕截图。
  • 好的,第一个视图控制器是 RevealViewController 的 sw_front,而单元格(“HOME”)所在的表视图位于 sw_rear。我希望我可以发布屏幕截图,但我不能
  • 好的,您能否将您的代码从后视图控制器粘贴到方法中:tableView didSelectRowAtIndexPath?
  • 请在下面查看我的回答,如果它符合您的需要,请告诉我。如果是,请接受答案。谢谢。

标签: ios xcode uiviewcontroller swrevealviewcontroller


【解决方案1】:

一旦您在后视图控制器中选择单元格,您实施的可能不是正确的 segue 方法。相反,您应该再次在显示控制器中设置前视图控制器以实现此目的。我会这样做(而且我没有使用 Segues):

menuItems 是表格视图的数据源 previousItem 只是我用来检查用户最后选择的字符串。如果最后一个选择与新的相同,我只是重置位置。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *item = [[menuItems objectAtIndex:indexPath.row] uppercaseString];
    UINavigationController *newController;
    if (![item isEqualToString:previousItem])
    {
        if ([item isEqualToString:@"HOME"])
            newController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeViewNavigationController"];

        ....... //conditions here for other cells.

        previousItem = item;

        [self.revealViewController setFrontViewController:newController];
        [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES];
    }
    else
    {
        [self.revealViewController setFrontViewPosition:FrontViewPositionLeft animated:YES];
    }
}

这是假设您在情节提要中定义了一个主视图控制器标识符并嵌入在导航控制器中。或者你也可以通过 alloc init 来实例化它。

如果您有任何问题,请告诉我。

希望这会有所帮助。

【讨论】:

  • 我有一个问题。我们在哪里设置 ViewController 的标识符?它在 Storyboard ID 中吗?
  • 是的。你应该在那里做。还要为嵌入视图的导航控制器设置它。不是实际的视图控制器。
  • 嘿,成功了。太感谢了。不仅是为了答案,也是为了更好地解释工作
  • 没问题 :) 很高兴我能帮上忙!感谢您的支持:)
【解决方案2】:

以下答案对您有帮助。

      1.If you have given triggered segue connection in storyboard, remove triggered segue connection.
      2.Then give push segue connection to Home Button to your required view controller(I mean you want to back first view controller).
      3.Click Home Button Segue and give Identifier name as "goToYourViewController" or whatever you want just give there.Also segue should be "push".

【讨论】:

  • 如果您有任何疑问,请咨询我
  • 我没有使用原型单元实现表格视图。我在xib外面创建了一个单元格。我无法按照您在此处建议的程序进行操作,可以吗?
  • 这不是问题。即使您创建自定义单元格,您也必须编写相同的内容。大多数时候我只使用自定义单元格,并且在 didSelectRowAtIndexPath 中您必须为每个单元格编写 segue 操作细胞。
  • 你的方法里为什么要写[self.navigationController popViewControllerAnimated:YES]和[self.navigationController pushViewController:viewC animated:YES]这两行?
  • 你找到解决办法了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多