12

我有一个自定义 UITableViewCell,名为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

事件单元.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- 从一个单元格拖动到另一个视图控制器的控制应该创建一个在点击单元格时工作的 segue。

就我而言,问题在于情节提要编辑器错误地创建了转场。我有两个非常相似的情节提要,一个有效,另一个无效,查看源代码(右键单击情节提要文件并选择Open As -> Source Code),我看到了:

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

注意trigger属性。这向我表明,segue 将从单元的辅助动作中触发。您甚至可以从单元的连接检查器中看到这一点:

在此处输入图像描述

通过从上面的“选择”句柄拖动而不是从单元格中拖动控件来删除它并替换segue,这给了我正确的segue。

我不确定这个使控制拖动连接到辅助操作而不是选择操作的特定单元格是什么,但你去了。

于 2014-12-16T10:53:40.723 回答
1

如上所述,didSelectRowAtIndexPath除非您将情节提要中的 segue 配置为新的UIViewController. 这允许您使用prepareForSegue函数而不是编程调用performSegueWithIdentifier.

希望这有助于清除它!

于 2012-08-11T20:02:54.700 回答
1

我的问题是单元格标识符。

因此,在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath我声明static NSString *cellIdentifier = @"cell";中,然后在 storyBoard 中,我在这里添加了这个标识符:

在此处输入图像描述

给你!

于 2014-10-05T12:21:34.620 回答