12

と呼ばれるカスタム UITableViewCell がありますEventCell

EventCell.h

#import <UIKit/UIKit.h>

@interface EventCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UILabel *titleLabel;
@property (nonatomic, strong) IBOutlet UILabel *locationLabel;
@property (nonatomic, strong) IBOutlet UILabel *dateLabel;
@property (nonatomic, strong) IBOutlet UILabel *typeLabel;
@end

EventCell.m

#import "EventCell.h"

@implementation EventCell

@synthesize titleLabel, locationLabel, dateLabel, typeLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

これが私のセルのセットアップ方法です。

EventsMasterViewController.m

- (EventCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Event *myEvent;
    NSString *CellIdentifier = @"EventCell";
    EventCell *cell = (EventCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"EventCell" owner:nil options:nil];

    for (id currentObject in topLevelObjects)
    {
        if ([currentObject isKindOfClass:[EventCell class]])
        {
            cell = (EventCell *)currentObject;
            break;
         }
    }

    myEvent = [self.myEventsDataController objectInListAtIndex:indexPath.row];

    cell.titleLabel.text = myEvent.name;
    cell.locationLabel.text = myEvent.location;
    cell.typeLabel.text = @"Social";
    cell.layer.borderColor = [UIColor blackColor].CGColor;
    cell.layer.borderWidth = 1.0;

    return cell;
}

セルは適切にフォーマットされており、必要に応じて正確に表示されます。しかし、それをクリックすると、セルが青く強調表示され、次のビューに移動しません。prepareForSegue メソッドにブレークポイントを設定しましたが、呼び出されません。

prepareForSegue を手動で呼び出す方法はありますか? もしそうなら、どこにすればいいですか?

4

4 に答える 4

25

実装する必要があります

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {



[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:nil];


}
于 2012-08-11T15:49:20.353 に答える
4

これを機能させるために実装する必要はありません-didSelectRowセルから別のビューコントローラーへのコントロールドラッグは、セルをタップしたときに機能するセグエを作成する必要があります。

私の場合、問題は、ストーリーボード エディターがセグエを正しく作成していなかったことです。私は2つの非常によく似たストーリーボードを持っていました.1つは機能し、もう1つは機能しませんでした.ソースコードを見て(ストーリーボードファイルを右クリックしてOpen As -> Source Codeを選択します)、私はこれを見ました:

<segue destination="UWX-rF-KOc" kind="replace" identifier="showStory" trigger="accessoryAction" splitViewControllerTargetIndex="1" id="Gly-La-KIe"/>

trigger属性に注意してください。これは、セグエが細胞の副次的作用から発せられることを示唆しています。これは、セルの接続インスペクターからも確認できます。

ここに画像の説明を入力

これを削除し、セルからコントロールを押しながらドラッグするのではなく、上の「選択」ハンドルからドラッグしてセグエを置き換えると、正しいセグエが得られました。

コントロールドラッグを選択アクションではなくアクセサリアクションに接続させるこの特定のセルについてはわかりませんが、それで終わりです。

于 2014-12-16T10:53:40.723 に答える
1

上記のようにdidSelectRowAtIndexPath、ストーリーボードでセグエを new に設定しない限り、使用する必要がありますUIViewControllerprepareForSegueこれにより、プログラムによる の呼び出しの代わりに関数を使用できますperformSegueWithIdentifier

それがそれを解決するのに役立つことを願っています!

于 2012-08-11T20:02:54.700 に答える