1

「CustomPreviCell」という名前のカスタムセルを作成しました(NIbの名前とこのNIBのセルの識別子)。私のcustomCellには、6つのラベルとimageViewが含まれています。このセルに対応する.mファイルは次のとおりです。

@interface CustomPreviCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *iconImageView;
@property (weak, nonatomic) IBOutlet UILabel *weatherLabel;
@property (weak, nonatomic) IBOutlet UILabel *detailOneLabel;
@property (weak, nonatomic) IBOutlet UILabel *detailTwoLabel;
@property (weak, nonatomic) IBOutlet UILabel *dayNumberLabel;
@property (weak, nonatomic) IBOutlet UILabel *dayTextLabel;
@property (weak, nonatomic) IBOutlet UILabel *monthLabel;

@end

そして実装:

#import "CustomPreviCell.h"

@implementation CustomPreviCell
@synthesize iconImageView;
@synthesize weatherLabel;
@synthesize detailOneLabel;
@synthesize detailTwoLabel;
@synthesize dayNumberLabel;
@synthesize dayTextLabel;
@synthesize monthLabel;

- (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];

}


@end

ここで、このセルをtableViewに表示します(もちろんです!)。そのため、ストーリーボードでは、1つのCustomCellプロトタイプを使用して新しいUITableViewを作成し、そのビューを「UITableViewController」を拡張するクラス「SinglePreviViewController」に参照しました。tableViewの従来のメソッド(numberOfRowsInSection:など)を実装しました。

メソッド「cellForRowAtIndexPath」で、カスタムセルを作成、初期化、表示したいので、次のように記述しました。

NSString *simpleTableIdentifier = @"CustomCellPrevi";
CustomPreviCell *cell = (CustomPreviCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCellPrevi" owner:self options:nil];

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

        NSString * iconName = [self loadIcon:indexPath.row];
        [cell.iconImageView setImage:[UIImage imageNamed:iconName]];
        cell.detailOneLabel.text = [[NSString alloc] initWithFormat:@"%@°C - %@mm",[descriptor.temperature objectAtIndex:indexPath.row], [descriptor.precipitations objectAtIndex:indexPath.row]];
        cell.detailTwoLabel.text = [[NSString alloc] initWithFormat:@"%@ (%@) km/h - %@hPa",[descriptor.vent objectAtIndex:indexPath.row],[descriptor.rafales objectAtIndex:indexPath.row], [descriptor.pression objectAtIndex:indexPath.row]];
        cell.weatherLabel.text = [descriptor.temps objectAtIndex:indexPath.row];
        NSDictionary * date = [self getDateComponentsFromXMLDate:[descriptor.date objectAtIndex:indexPath.row]];

        if([[date valueForKey:@"dayNumber"] intValue] %2 == 0)
            [cell.contentView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.0]];
        else 
            [cell.contentView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.15]];


        cell.dayTextLabel.text = [date valueForKey:@"dayText"];
        cell.dayNumberLabel.text = [[NSString alloc] initWithFormat:@"%@ %@",[date valueForKey:@"dayNumber"],[date valueForKey:@"month"]];
        cell.monthLabel.text = [date valueForKey:@"hour"];

    }
}
return cell;

私のアプリを起動しましょう:それは正しく動作します!tableViewにはCustomPreviCellsが含まれており、コンテンツを正しく表示します。しかし...これらのセルから新しいviewControllerをプッシュしたい場合、機能しません。customCell(ストーリーボードのTableViewのセルから)を新しいビューコントローラー(DetailPreviViewcontrollerという名前)に接続しましたが、何もしません。customCellが選択されました。

助けてください :)

編集1:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Hey !");
    if([segue.identifier isEqualToString:@"propertiesSegue"])
    {
        NSLog(@"Hello");
        SingleVillePropertiesViewController * destinationController = [segue destinationViewController];
        [destinationController setVille:ville];
    }
    else if([segue.identifier isEqualToString:@"detailPreviSegue"])
    {
        DetailPreviViewController * destController = [segue destinationViewController];
        [[self navigationController] pushViewController:destController animated:YES];

        //TODO : set previDescriptor to my destController but it's not important 
        //       for this problem.
    }
}

編集2: わかりました、私はまだこの問題の解決策を持っていません、しかし私はこれをすることによってそれを取り除きます:

1 /プッシュするViewコントローラーの新しいペン先を作成します(ストーリーボードにはありません)

2 / ViewControllerのクラス(私の場合はDetailPreviViewController)とFilesOwnerのビューをNIBビューに設定します

3/navigationControllerを使用してメソッド「didSelectRowAtPath」からビューをプッシュします。

私はこの方法を進めるのが好きではありませんが、今のところ、機能するのはそれだけです...

4

2 に答える 2

1

View Controller全体ではなく、ストーリーボードのセルを接続したことを確認してください。これは非常に簡単に発生する可能性があります。これを行う 1 つの方法は、最初にセルを選択してからドラッグすることです。

実装する必要はありませんdidSelectRowAtIndexPath。それは、ストーリーボードのセグエ全体を役に立たなくしてしまいます...

于 2012-07-13T09:26:38.387 に答える
0

セグエの編集された回答:

これを実装してみてください

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"prepareForSegue: %@", segue.identifier);

    if ([segue.identifier isEqualToString:@"A"]) {
        [segue.destinationViewController setValue1:@"something"];
        // Maybe you have to alloc init your view controller also

    } else if ([segue.identifier isEqualToString:@"B"]) {
        [segue.destinationViewController setValue1:@"something else"];
    }
}
于 2012-07-13T09:24:04.073 に答える