3

あるView ControllerでテーブルビューからUITableViewCellを選択し、セルのデータを別のView Controllerに渡したいと思います。

コード:

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

myView最初のビューからプッシュしたいビューです。 mainCellの UITableViewCell プロパティですmyView。選択したセルとまったく同じにしたいのです。 currentCell選択したセルの行番号を返す単なる整数です。

ビュー コントローラ間で 1 つのセルを渡すにはどうすればよいですか?

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ファイルで、次のように設定できます...

@実装 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 に答える