跨视图控制器发送UITableViewCell

时间:2013-07-08 18:40:28

标签: ios objective-c cocoa-touch

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

代码:

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

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

如何在视图控制器之间传递一个单元格?

2 个答案:

答案 0 :(得分:2)

实际上你不需要传递单元格,因为它会像很多人评论的那样搞乱引用。看看this。它讨论了面临的同样问题。

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

[self.navigationController pushViewController:destController animated:YES];
}

答案 1 :(得分: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子类。它们不应该包含这种方式的数据。仅用于显示它。