3

我想从一个视图控制器的表视图中选择一个 UITableViewCell 并将单元格的数据传递到另一个视图控制器。

代码:

-(void)pushView
{
myView.mainCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath     indexPathWithIndex:currentCell]];
[self.navigationController pushViewController:myView animated:YES];
}

myView是我想从我的第一个视图中推送的视图。 mainCell是一个 UITableViewCell 属性myView。我希望它正是所选单元格的内容。 currentCell只是一个整数,它返回所选单元格的行号。

如何跨视图控制器传递一个单元格?

4

2 回答 2

2

实际上,您不需要传递单元格,因为它会弄乱许多人评论的引用。看看这个。它讨论了你面临的同样的问题。

- (IBAction)nextScreenButtonTapped:(id)sender
{
DestinationViewController *destController = [[DestinationViewController alloc] init];
//pass the data here
destController.data = [SourceControllerDataSource ObjectAtIndex:currentCell];    

[self.navigationController pushViewController:destController animated:YES];
}
于 2013-07-08T19:06:07.320 回答
1

啊,我明白你现在想要什么了。

您想要的是在表格视图单元格中显示一些数据。然后移动到应用程序中的其他位置,并在不同的表格视图中显示相同的数据,但布局方式完全相同。

那你要做的就是这个...

首先创建一个新类,它是它的子类,UITableViewCell例如MyTableViewCell.

下一部分取决于您是否使用 Interface Builder,但我现在将在代码中完成所有操作。

在新类中,在 .h 文件中创建您的接口属性。

@interface MyTableViewCell : UITableViewCell

@property (nonatomic, strong) UILabel *nameLabel;
@property (nonatomic, strong) UIImageView *someImageView;
etc...

@end

现在在 .m 文件中,您可以像这样设置它......

@implementation MyTableViewCell

- (void)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //set up your labels and add to the contentView.
        self.nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
        [self.contentView addSubView:self.nameLabel];

        self.someImageView = ...
        [self.contentView addSubView:self.someImageView];

        // and so on for all your interface stuff.
    }
    return self;
}

@end

现在在UITableViewController你想使用这个单元格的地方你可以做......

- (void)viewDidLoad
{
    // other stuff

    [self.tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"MyCustomCellReuseIdentifier"];

    // other stuff
}

然后在单元格中的行...

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *customCell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCellReuseIdentifier"];

    customCell.nameLabel.text = //some string that you got from the data
    customCell.someImageView.image = //some image that you got from the data

    return customCell;
}

这样做你可以在多个地方使用相同的单元格布局,你所要做的就是填充数据。

当您将数据传递到新的表格视图时,您可以使用相同的单元格类来重新填充它与传递的数据。

永远不要传递 UIView 或 UIView 子类。它们不应该以这种方式包含数据。仅用于显示它。

于 2013-07-08T19:02:08.507 回答