1

嗨,我正在尝试根据用户选择的内容推送到不同的视图。我有一个表格视图,其中有 4 个其他视图控制器通过情节提要中的推送序列链接到它。所有 Segue 都直接链接到 TableView 视图控制器。根据选择的单元格,它会加载相应的视图。这是我正在使用的代码:

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


    NSDictionary *dictionary = [_articles objectAtIndex:indexPath.row];
    NSArray *selectedKey = [dictionary objectForKey:@"Key"];


    if ([selectedKey isEqual:@"Driver"]){

        self.driverDetailView.wikiItem = dictionary;
        [self.driverDetailView performSegueWithIdentifier:@"pushDriver" sender:dictionary];
        NSLog(@"Push Driver");
    }

    if ([selectedKey isEqual:@"Team"]) {
        NSLog(@"Push Team");
    }
}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSLog(@"Preparing For Segue");
    if ([[segue identifier] isEqual:@"pushDriver"]) {
        self.driverDetailView=segue.destinationViewController;
    }

}

由于某些原因

 [self.driverDetailView performSegueWithIdentifier:@"pushDriver" sender:dictionary];
 NSLog(@"Push Driver");

不允许我在开始时设置为“Self”,我收到一条错误消息:

TableCell 没有可见的@interface 声明选择器 performSegueWithIdentifier

如果我使用“self.driverDetailView”我不会收到错误,但是当我选择单元格时没有任何反应。

继承人 Horizo​​ntalTableView.h

#import <UIKit/UIKit.h>
#import "HorizontalDetailView.h"
#import "HorizontalTableCell.h"
@interface HorizontalTableView : UITableViewController <UITableViewDelegate,   UITableViewDataSource> {

NSDictionary *_articleDictionary;
NSMutableArray *_reusableCells;

}

@property (nonatomic, retain) NSDictionary *articleDictionary;
@property (nonatomic, retain) NSMutableArray *reusableCells;


@end

这是 Horizo​​ntalTableView.m

#import "HorizontalTableView.h"
#import "HorizontalTableCell.h"
#import "ControlVariables.h"
#import "HorizontalDetailView.h"

#define kHeadlineSectionHeight  26
#define kRegularSectionHeight   18

@interface HorizontalTableView ()

@end

@implementation HorizontalTableView
@synthesize articleDictionary = _articleDictionary;
@synthesize reusableCells = _reusableCells;



- (void)awakeFromNib{
    [self.tableView setBackgroundColor:kVerticalTableBackgroundColor];
    self.tableView.rowHeight = kCellHeight + (kRowVerticalPadding * 0.5) + ((kRowVerticalPadding * 0.5) * 0.5);
}

- (id)initWithStyle:(UITableViewStyle)style{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad{
    [super viewDidLoad];

    self.articleDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]];
}

- (void)viewDidUnload{
    [super viewDidUnload];

    self.articleDictionary = nil;
    self.reusableCells = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:     (UIInterfaceOrientation)interfaceOrientation{

    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [self.articleDictionary.allKeys count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"HorizontalCell";

    HorizontalTableCell *cell = (HorizontalTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil){
        cell = [[HorizontalTableCell alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, tableView.frame.size.height)];
    }

    NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
    NSArray* sortedCategories = [self.articleDictionary.allKeys sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    NSString *categoryName = [sortedCategories objectAtIndex:indexPath.section];

    NSArray *currentCategory = [self.articleDictionary objectForKey:categoryName];

    cell.articles = currentCategory;

    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    return section == 0 ? kHeadlineSectionHeight : kRegularSectionHeight;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    UIView *customSectionHeaderView;
    UILabel *titleLabel;
    UIFont *labelFont;

    if (section == 0)
    {
        customSectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, kHeadlineSectionHeight)];

        titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, tableView.frame.size.width, kHeadlineSectionHeight)];
        labelFont = [UIFont boldSystemFontOfSize:20];
    }
    else
    {
        customSectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, kRegularSectionHeight)];

        titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, tableView.frame.size.width, kRegularSectionHeight)];

        labelFont = [UIFont boldSystemFontOfSize:14];
    }

    customSectionHeaderView.backgroundColor = [UIColor colorWithRed:0.01176471 green:0.01176471 blue:0.01960784 alpha:0.95];

    titleLabel.textAlignment = UITextAlignmentLeft;
    [titleLabel setTextColor:[UIColor whiteColor]];
    [titleLabel setBackgroundColor:[UIColor clearColor]];
    titleLabel.font = labelFont;

    NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
    NSArray* sortedCategories = [self.articleDictionary.allKeys sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    NSString *categoryName = [sortedCategories objectAtIndex:section];

    titleLabel.text = [categoryName substringFromIndex:1];

    [customSectionHeaderView addSubview:titleLabel];


    return customSectionHeaderView;
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSLog(@"Preparing For Segue");
}

@end

Horizo​​ntalTableCell.h 的代码是:

#import <UIKit/UIKit.h>
#import "HorizontalDetailView.h"
#import "DriverDetailView.h"
#import "HorizontalTableView.h"
@interface HorizontalTableCell : UITableViewCell <UITableViewDelegate, UITableViewDataSource> {

    UITableView *_horizontalTableView;
    NSMutableArray *_articles;
    HorizontalTableCell *horizontalTableCell;

}


@property (nonatomic, strong) UITableView *horizontalTableView;
@property (nonatomic, strong) NSMutableArray *articles;
@property (nonatomic, strong) HorizontalDetailView *horizontalDetailView;
@property (nonatomic, strong) DriverDetailView *driverDetailView;
@property (nonatomic, strong) HorizontalTableCell *horizontalTableCell;
@end

Horizo​​ntalTableCell.m 的代码是:

#import "HorizontalTableCell.h"
#import "ControlVariables.h"
#import "ArticleCell.h"
#import "HorizontalDetailView.h"
@implementation HorizontalTableCell

@synthesize horizontalTableView = _horizontalTableView;
@synthesize articles = _articles;
@synthesize horizontalDetailView;
@synthesize driverDetailView;
@synthesize horizontalTableCell;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [self.articles count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";

    ArticleCell *cell = (ArticleCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil){
        cell = [[ArticleCell alloc] initWithFrame:CGRectMake(0, 0, kCellWidth, kCellHeight)];
    }

    NSDictionary *currentArticle = [self.articles objectAtIndex:indexPath.row];

    cell.thumbnail.image = [UIImage imageNamed:[currentArticle objectForKey:@"Image"]];
    cell.titleLabel.text = [currentArticle objectForKey:@"Title"];

    return cell;
}

- (void)dealloc{
    self.horizontalTableView = nil;
    self.articles = nil;
}

- (NSString *) reuseIdentifier{
    return @"HorizontalCell";
}

- (id)initWithFrame:(CGRect)frame{
    if ((self = [super initWithFrame:frame])){
        self.horizontalTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, kCellHeight, kTableLength)];
        self.horizontalTableView.showsVerticalScrollIndicator = NO;
        self.horizontalTableView.showsHorizontalScrollIndicator = NO;
        self.horizontalTableView.transform = CGAffineTransformMakeRotation(-M_PI * 0.5);
        [self.horizontalTableView setFrame:CGRectMake(kRowHorizontalPadding * 0.5, kRowVerticalPadding *
                                                      0.5, kTableLength - kRowHorizontalPadding, kCellHeight)];

        self.horizontalTableView.rowHeight = kCellWidth;
        self.horizontalTableView.backgroundColor = kHorizontalTableBackgroundColor;

        self.horizontalTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        self.horizontalTableView.separatorColor = [UIColor clearColor];

        self.horizontalTableView.dataSource = self;
        self.horizontalTableView.delegate = self;
        [self addSubview:self.horizontalTableView];
    }

    return self;
}

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

    NSDictionary *dictionary = [_articles objectAtIndex:indexPath.row];
    NSArray *selectedKey = [dictionary objectForKey:@"Key"];
    // NSLog(@"Selected Key = %@",selectedKey);

    if ([selectedKey isEqual:@"Driver"]){

        self.driverDetailView.wikiItem = dictionary;
        [self performSegueWithIdentifier:@"pushDriver" sender:self];
        NSLog(@"Push Driver");
    }

    if ([selectedKey isEqual:@"Team"]) {
        NSLog(@"Push Team");
    }

    if ([selectedKey isEqual:@"Tech"]) {
        NSLog(@"Push Tech");
    }

    if ([selectedKey isEqual:@"Track"]) {
        NSLog(@"Push Track");
    }

    //self.horizontalDetailView.wikiItem = dictionary;

    // NSLog(@"selected Array = %@",dictionary);

}


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSLog(@"Preparing For Segue");
    if ([[segue identifier] isEqual:@"pushDriver"]) {
        self.driverDetailView=segue.destinationViewController;
    }
}

@end
4

1 回答 1

0

如果我理解正确,您的 segues 已连接到表格视图单元格。如果这是正确的,我建议将它们从视图控制器本身挂钩到目标视图控制器,然后调用[self performSegueWithIdentifier:@"pushDriver"];您的didSelectRowAtIndexPath:方法。

于 2012-04-24T21:29:48.510 回答