无法将值从UITableViewCell传递到详细信息视图

时间:2012-08-19 19:57:00

标签: objective-c cocoa-touch uistoryboard

我正在尝试根据表视图中触摸的单元格更改详细视图中标签的颜色。

我无法做到这一点。以下是我的代码。我在详细信息视图中包含了头文件,并为标签创建了IBOutlet

更新:理想情况下,当我点击一个单元格时,detailview中的标签颜色应为红色。这是一个关于我的问题的截屏视频。 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]];
        }
    }
}

2 个答案:

答案 0 :(得分:0)

当您离开时,插座尚未设置,因此您无法让他们更改它们。尝试发送一些对象或其他内容,并在viewcontroller的viewdidload中,你将其读取,然后使用它作为知道要更改的颜色的方式,然后在相同的代码中更改标签的颜色。

答案 1 :(得分: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对象来为你保存这些属性是明智的。