我想在一个视图控制器中从我的表视图中选择一个UITableViewCell,并将该单元的数据传递给另一个视图控制器。
代码:
-(void)pushView
{
myView.mainCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathWithIndex:currentCell]];
[self.navigationController pushViewController:myView animated:YES];
}
myView
是我想从第一个视图推出的视图。
mainCell
是myView
的UITableViewCell属性。我希望它正是所选单元格的内容。
currentCell
只是一个整数,它返回所选单元格的行号。
如何在视图控制器之间传递一个单元格?
答案 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子类。它们不应该包含这种方式的数据。仅用于显示它。