1

テーブル ビューでタッチされたセルに基づいて、詳細ビューのラベルの色を変更しようとしています。

私はこれを実現することはできません。以下は私のコードです。詳細ビューからヘッダー ファイルをインクルードしIBOutlet、ラベル用に を作成しました。

更新:理想的には、セルをクリックすると、詳細ビ​​ューのラベルの色が赤になるはずです。そして、これが私の問題に関するスクリーンキャストです。http://www.youtube.com/watch?v=i0nhbsNJWHY&feature=youtube_gdata_player

#pragma mark - TableView Delegate
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [self performSegueWithIdentifier:@"ReferenceDetail" sender:tableView];
}

#pragma mark - Segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ReferenceDetail"]) {
        ReferenceDetailViewController *referenceDetailViewController = [segue destinationViewController];

        UIViewController *referenceDetailView = [segue destinationViewController];

        if(sender == self.searchDisplayController.searchResultsTableView) {
            NSIndexPath *indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
            NSString *destinationTitle = [[filteredReferenceArray objectAtIndex:[indexPath row]] name];
            [referenceDetailView setTitle:destinationTitle];

        }
        else {
            NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
            NSString *destinationTitle = [[referenceArray objectAtIndex:[indexPath row]] name];
            [referenceDetailView setTitle:destinationTitle];
            [referenceDetailViewController.label1 setTextColor:[UIColor redColor]];
        }
    }
}
4

2 に答える 2

0

あなたが抱えている問題は、ReferenceDetailViewController内のアウトレット UILabelが xib からロードされていないにもかかわらず、textColor プロパティを設定しようとしていることです。

これが問題であることを確認する方法として、色を設定した行にブレークポイントを設定し、ReferenceDetailViewController [viewDidLoad] メソッド内に別のブレークポイントを設定してみてください。色を設定する行が最初に呼び出されます。

問題の簡単な解決策は、ReferenceDetailViewControllerクラスに UIColor インスタンスを「保持」するプロパティを設定し、後でそれを viewDidLoad メソッドに設定することです。

// ...

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"ReferenceDetail"]) {
        ReferenceDetailViewController *referenceDetailViewController = [segue destinationViewController];

        UIViewController *referenceDetailView = [segue destinationViewController];


            NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
            NSString *destinationTitle = [[referenceArray objectAtIndex:[indexPath row]] name];
            [referenceDetailView setTitle:destinationTitle];
            referenceDetailViewController.auxTextColor = [UIColor redColor];
}

// ..

そして ReferenceDetailViewController で:

@interface ReferenceDetailViewController : UIViewController

@property (retain, nonatomic) UIColor *auxTextColor;

// ...

@end

@implementation ReferenceDetailViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    label1.textColor = self.auxTextColor;

    // ...
}

@end

一連のラベルに対してこれを行う必要がある場合は、これらのプロパティを保持する NSDictionary オブジェクトを用意することをお勧めします。

于 2012-08-19T21:51:46.563 に答える
0

セグエの時点ではコンセントはまだセットアップされていないため、コンセントにアクセスして変更することはできません。いくつかのオブジェクトまたは何かを送信してみて、ビューコントローラーのviewdidloadでそれを読んでから、それをどの色に変更するかを知る方法として使用し、同じコードでラベルの色を変更してみてください。

于 2012-08-19T21:24:13.523 に答える