こんにちは、ユーザーの選択に応じて別のビューにプッシュしようとしています。ストーリー ボードのプッシュ セグエを介してリンクされた他の 4 つのビュー コントローラーを含むテーブル ビューがあります。すべてのセグエは、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」を使用するとエラーは発生しませんが、セルを選択しても何も起こりません。
Heres HorizontalTableView.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
こちらが HorizontalTableView.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
HorizontalTableCell.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
HorizontalTableCell.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