【问题标题】:UIViewTableCell didSelectRowAtIndexPath is calling but not pushing a view controllerUIViewTableCell didSelectRowAtIndexPath 正在调用但未推送视图控制器
【发布时间】:2010-06-09 08:49:00
【问题描述】:

所以我有一个带有 UITableView 的 UIViewController 视图。 所以 UIViewController 类名是 SelectionScreen。 UITableView 类名为 SelectionScreenTable。

图片: http://img717.imageshack.us/i/screenshot20100609atpm0.png/

我在 SelectionScreen 类中声明了一个 UITableView *selectionTable 并将其连接到 SelectionScreen 的 xib 文件

问题是什么,当我单击表格中的一行时,它仍然选择为突出显示的蓝色,它调用 didSelectRowAtIndexPath(使用 NSLog 检查)但没有推送一个名为(GraphView)的新视图。

这是我用来调用带有普通按钮的新控制器的代码

GraphView *aSelectionScreenViewController = [[GraphView alloc]
         initWithNibName:@"GraphView"
         bundle:nil];

[self presentModalViewController:aSelectionScreenViewController 动画:YES]; [aSelectionScreenViewController 发布];

搜了一圈,发现需要在viewload的UITableView类本身中为表设置一个delegate

tableview.delegate = self;

self.tableview.delegate = self;

但它不起作用。控制器仍然没有被推动,是的,我已经检查了控制器不是 nil,因为我用一个简单的按钮尝试了它。

所以我在考虑是否应该在 UIViewController 上设置 UITableView 的委托,所以我尝试了这段代码

selectionTable.delegate = selectionTable.self;

但显然它不起作用=\,它弄乱了整个 UITableView 并导致所有单元格都是它的预定义设置。

那么有没有人知道我如何让它工作。

【问题讨论】:

    标签: iphone ipad


    【解决方案1】:

    在这里了解全貌有点困难,但我可以尝试一些提示。

    从屏幕截图来看,插座似乎正确连接,尽管选择屏幕表可能被称为选择屏幕表控制器,并且类名应该是 SelectionScreenTableController 以减少混淆。

    我认为问题可能是方法 presentModalViewController: 必须在活动视图控制器上调用才能工作。

    据我所知,你有三个视图控制器,一个 SelectionScreenTableController,一个 GraphViewController,然后还必须有某种主控制器,可能是 SelectionScreenController。

    SelectionScreenController 是活动视图控制器,因此它必须是发送 presentModalViewController: 消息的那个。

    有几种方法可以解决这个问题。快速解决方法是在 SelectionScreenTableController 中创建一个名为 selectionScreenController 的插座,并将其链接到 nib 文件中的 File's Owner(假设您的 SelectionScreen 类实际上是一个视图控制器),然后调用:

    [selectionScreenController
        presentModalViewController:aSelectionScreenViewController
        animated: YES];
    

    而不是在您当前的 didSelectRowAtIndexPath 列表中:

    【讨论】:

    • 嗨!谢谢回答!我试过你的代码,现在看起来像这样 GraphView *aSelectionScreenViewController = [[GraphView alloc] initWithNibName:@"GraphView" bundle:nil]; [selectionScreenController presentModalViewController:aSelectionScreenViewController 动画:YES];不知道你在说什么但它不起作用,:(如果我做错了什么,请原谅我。这里有一些显示 xib 连接的截图img10.imageshack.us/i/screenshot20100609atpm0.pngimg268.imageshack.us/i/screenshot20100609atpm0.png
    • 嗯,但现在您似乎已经从第一篇文章中移动了网点并更改了课堂作业。以前的插座看起来不错,但现在你说文件的所有者应该属于 SelectionScreenTable 类,而表视图控制器应该属于 SelectionScreen 类,你不能像那样切换它们。如果您想尝试我要解释的内容,则必须将类和插座移回原来的方式,然后在您的 SelectionScreenTable 类中添加一个插座:@property (nonatomic, retain) IBOutlet SelectionScreen *selectionScreen; (空间不够)
    • 但是,我不确定您希望应用程序本身的外观如何,如果您的意思是选择屏幕仅容纳表格,那么请摆脱笔尖中的 SelectionScreenTable 橙色东西完全改为类 SelectionScreenTable 的 File 的 Owner。然后将所有代码放在 SelectionScreenTable.m 中,而不是在 SelectionScreen.m 和 SelectionScreenTable.m 之间传播
    • hmm 实际上我希望 SelectionScreen 保存 selectionScreenTable,然后在单击一行时,它将推送一个名为 graphView 的视图,该视图与整个 selectionScreen 重叠。
    【解决方案2】:

    大家好,我在截图中解决了

    http://img717.imageshack.us/i/screenshot20100609atpm0.png/

    SelectionScreen 的 XIB 中的 SelectionScreenTable 控制器,视图出口没有连接到 SelectionScreen XIB 中的 XIB,所以我猜它没有正确配置。

    【讨论】:

      【解决方案3】:

      我解决了它而不是使用 presentModalViewController。

      我使用动画来引入视图 更多信息在下面的链接中 http://www.iphonedevsdk.com/forum/iphone-sdk-development/13427-uiview-slide-transition.html

      【讨论】:

        猜你喜欢
        • 2015-11-23
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 2010-12-11
        相关资源
        最近更新 更多