【问题标题】:How to push a UITableView from within a DetailView?如何从 DetailView 中推送 UITableView?
【发布时间】:2012-11-23 03:32:43
【问题描述】:

我正在构建一个使用 UICollectionView 来显示博客文章数组的应用程序。

当用户点击帖子时,会推送一个 DetailView 以显示帖子的内容。

在详细视图中,可以看到帖子图片、文字等。还有一个显示 cmets 的按钮。

我希望用户能够点击comments 按钮并加载一个UITableView,它将显示为该帖子编写的所有cmets。这是我无法实现的部分。

我使用界面生成器创建了一个 UITableView,并使用 segue 将其连接到 DetailView。当点击comments 按钮时,我得到一个空表。

在我的 DetailView 上,点击 cmets 按钮会触发:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showComments"]) {

        NSDictionary *post           = self.detailItem;
        NSArray      *commentThread  = [post objectForKey:@"comment"];

        // how do I pass the commentThread to the UITableView at the other end of the segue?
    }
}

有任何想法如何完成这项工作吗?很高兴发布更多代码。

这是我的CommentViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"commentCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSDictionary *comment       = [self.commentArray objectAtIndex:indexPath.row];
    NSString     *commentText   = [comment objectForKey:@"comment_text"];
    NSString     *commentAuthor = [comment objectForKey:@"comment_author"];

    cell.textLabel.text = commentText;

    return cell;

    NSLog(@"%@", comment);
}

还有CommentViewController.h

#import <UIKit/UIKit.h>

@interface CommentViewController : UITableViewController {
    NSArray *commentArray;
}

@property (strong, nonatomic) id commentArray;

@end

【问题讨论】:

    标签: iphone objective-c ios uitableview ios5


    【解决方案1】:

    你是否为你的 UITableView 创建了一个控制器?

    如果这似乎是一个基本答案,我可能没有正确理解您的设计目标,很抱歉,但如果您正在执行序列,那么您应该初始化 tableview 控制器并以某种方式设置您的数据源。

    例如,在你为 segue 做准备时,你应该有这样的东西:

    CommentsControllerView *myTableView = segue.destinationViewController;
    myTableView.commentsArray = self.commentsArray;
    myTableView.itemId = self.itemId;
    

    在您的自定义 tableview 控制器中,您可以创建一个 NSArray 属性来保存 cmets 数组并按照标准程序设置您的 tableview。或者您将使用一些逻辑来检索适当的 cmets 并为您的新 tableview 加载 tableview 数据源。当它初始化时,它将包含您传递给它的数据,然后它应该像使用 tableview 委托和数据源方法的标准 tableview 一样运行。

    这有帮助吗?希望如此。

    【讨论】:

    • @CocoaaEv - 我确实为 UITableView 创建了一个名为 CommentsControllerView.h/m 的控制器——两者都是基于 UITableView 创建的,因此它们包含一堆模板代码——你提供的代码,如果它进入DetailView 按钮在哪里?
    • 上面的代码在提供 cmets 按钮的控制器中的准备 segue 方法中。我认为您想在按下评论按钮后推送 cmets 的表格视图。按下按钮时,您将使用具有正确 segue 名称的标识符调用 perform segue。此外,请确保在您的故事板中,您将新控制器分配给对象检查器中的 tableview 控制器。然后在准备 segue 时,您将传入实际的 cmets 或某种类型的标识符,以便您可以获得该项目的实际 cmets。
    • 这非常有帮助@cocoaev - 到目前为止,我已经设置了所有内容并且没有错误 - 我已经在 OP 中添加了来自 CommentViewController.m 的代码 - 没有错误,但表格仍然显示为空白如果数据没有被传递 - NSLog 也不输出任何东西 - 缺少什么?
    • 嗨 torr - 检查以确保您正确设置了 tableview 代表。您可以在代码或情节提要中完成。在代码中它会是这样的: self.tableView.delegate = self; self.tableView.datasource = 自我;另外 - 另一个技巧是在您的 tableview 数据源中硬编码几个条目,以确保事情正确连接并正常工作。一旦它与硬编码一起工作,就换回“通过”的数据。此外,您可以在传入数据之前和之后对数据进行 nslog,以验证您是否正确传递数据。希望有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多