在按下 DetailDisclosureButton 时显示 UIViewController

Posted

技术标签:

【中文标题】在按下 DetailDisclosureButton 时显示 UIViewController【英文标题】:Show UIViewController on DetailDisclosureButton pressed 【发布时间】:2012-12-22 22:09:40 【问题描述】:

我正在尝试获取 UIViewController(使用情节提要构建的 GUI),以显示何时触摸/按下 DetailDisclosureButton。我制作了一个非常简单的 GUI,屏幕上只有一个按钮。我给了它自定义类NFLGameDetailsController,并在情节提要上没有做任何其他事情。

然后我创建了一个名为 NFLGameDetailsController 的类,它继承自类 UIViewController

这是Xcode继承UIViewController类时生成的代码:

#import "NFLGameDetailsController.h"

@interface NFLGameDetailsController ()

@end

@implementation NFLGameDetailsController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

最后,在我的主控制器上,我将#import "NFLGameDetailsController.h" 添加到我的头文件中,并实现了显示我的 UIViewController 的方法,如下所示:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

    NFLGameDetailsController *controller = [[NFLGameDetailsController alloc] init];
    [[self navigationController] pushViewController:controller animated:YES];

这个方法被调用,一切看起来都很好,但是当我按下附件细节披露按钮时,我得到一个黑屏:

为什么它没有显示我使用情节提要创建的 GUI?谢谢。

【问题讨论】:

您的初始化程序表明您已经编写了没有 StoryBoards 的 UI(显然不是这种情况)。要么覆盖 -init 并以编程方式设置,要么使用 performSegueWithIdentifier:sender: 对不起,我一直在搞乱performSegueWithIdenitifier:sender:,我只是一头雾水……使用它时,我应该这样称呼它:NFLGameDetailsController *controller = [[NFLGameDetailsController alloc] init]; [self performSegueWithIdentifier:@"gameDetailsSegue" sender:controller]; 您甚至不必分配和初始化任何东西(情节提要为您完成) 【参考方案1】:

这是因为你只是在实例化一个类,而不是一个视图

如果你想从代码中加载另一个视图,你可以这样做

首先,将 Storyboard ID 分配给 Storyboard 编辑器中的视图控制器(例如 NFLGameDetailsController)

然后

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

    NFLGameDetailsController *controller = (NFLGameDetailsController *)[self.storyboard instantiateViewControllerWithIdentifier:@"NFLGameDetailsController"];
    [[self navigationController] pushViewController:controller animated:YES];

但您可以使用情节提要编辑器来配置您的表格视图及其单元格以加载另一个无需代码的视图

【讨论】:

以上是关于在按下 DetailDisclosureButton 时显示 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在按下按钮时更新位置

输入类型按钮在按下时会改变颜色?

在按下时查看:按下时更改背景颜色?如何显示正在按下视图?

在按下 DetailDisclosureButton 时显示 UIViewController

如何在按下其他 UIButton 时触发 UIButton 的“按下效果”或“突出显示效果”

在按下完成或uitextfield的返回键时调用函数