所以我遇到的这个问题已经使我疯狂了好几个小时,而且我觉得自己很愚蠢,因为它看起来很简单。在过去的3个小时里,我一直在网上搜索并弄乱了代码,但仍然无法弄清:(

在开始之前,我将使用Xcode 4.3.1并在iOS 5.1(模拟器和物理设备)上进行测试。

所以这是我到目前为止所做的:

  • 使用 Storyboard 连接我的所有 View
  • 我的一个 View 是UITableViewController,它链接到UIViewController(使用“push”,并且可以在两个 View 之间来回正确地工作)
  • UITableViewController子类称为ScheduleViewController
  • UIViewController子类称为EventViewController
  • 我已经用适当的内容填充了所有节和表单元格(我正在使用textLabel和detailTextLabel(这不是问题)
    -对于UIViewController,我只添加了一个标签,并为该标签生成了一个IBOutlet:headerLabel

  • 这是我要完成的工作:
  • 当用户单击ScheduleViewController中的表格单元格时,请转到EventViewController(到目前为止,它可以工作!)
  • 根据选定的表单元格,将textLabel.text,detailTextLabel.text和Section Header文本传递给EventViewController(有点工作,所有值都随NSLog一起出现,仅此而已??)
  • 我认为最好是从小处开始,所以我将通过将headerLabel文本(在EventViewController中)设置为Section Header Text(在ScheduleViewController中)开始-当我使用NSLog检查值时,这似乎再次起作用,但是当我尝试设置headerLabel的实际文本时,它仅显示并为空字符串:(

  • 这是我被困住的地方以及到目前为止我已经尝试过的地方:
  • 首先,我已经完成了完全相同的操作(除了在iOS 4中,并且我没有使用 Storyboard ),我所做的是在UITableViewController的didSelectRowAtIndexPath:方法中,我只是做了类似的工作很好:)):

    EventViewController * eventViewController = [[EventViewController alloc] initWithNibName:@“EventViewController” bundle:nil];
    eventViewController.headerLabel.text = stringToPass;
  • 因此,当然,这是我尝试的第一件事,但由于它就是编程方式,所以它没有用,因为哈哈。
  • 因此,接下来我在EventViewController中创建了一个自定义init方法:
  • (id)initEventTime:(NSString *)eventTime andName:(NSString *)eventName andDate:(NSString *)eventDate;
  • 首先,我尝试在ScheduleViewController的didSelectRowAtIndexPath:方法中调用它,并且确实可行,这是EventViewController中的方法:
    //Method to initialize event time, name, and date.
    
  • (id)initEventTime:(NSString *)eventTime andName:(NSString *)eventName andDate:(NSString *)eventDate
    {
    自我= [ super initWithNibName:@“EventViewController” bundle 包:无];
    如果(个体经营)
    {
    NSLog(@“我的自定义”);
    //自定义初始化

    // NSLog(@“%@”,eventTime);
    // NSLog(@“%@”,eventName);
    // NSLog(@“%@”,eventDate);
    NSString * mystr = [NSString stringWithFormat:@“%@”,eventDate];
    NSLog(@“1:%@”,mystr);
    [self setTheEventDate:eventDate];
    NSString * mystr2 = [self getTheEventDate];
    NSLog(@“2:%@”,mystr2);
    headerLabel.text = [self getTheEventDate];
    NSLog(@“label:%@”,headerLabel.text);
    NSLog(@“3:%@”,eventDate);

    //self.headerLabel.text = [NSString stringWithFormat:@“%@”,eventDate];
    }
    返回自我
  • 这是我在didSelectRowAtIndexPath:方法(在ScheduleViewController中)中调用方法的方式:

    EventViewController * evc = [[EventViewController alloc] initEventTime:timeValue andName:eventValue andDate:dateValue];
  • 因此,如您在上面看到的,我首先使用NSLog检查了值是否出现在输出窗口中,而它们都做到了!
  • 但是当我尝试设置headerLabel文本时,仍然返回一个空字符串
  • 因此,我然后尝试在EventViewController中创建一个名为getTheEventDate和setTheEventDate的getter和setter(如上所示)。
  • 在这些方法中,我只需使用eventDate参数设置TheEventDate,然后获取值即可。并再次出现在输出窗口中,但标题字符串为空字符串
  • 我也尝试过使用NSLog来获取eventDate的值,使用NSLog来获取headerLabel的文本值,以及另一个NSLog来确保eventDate不为null。
  • 这是输出窗口的输出:

    2012-03-31我的习惯
    2012-03-31七月28
    2012-03-31 2:7月28日
    2012-03-31标签:(空)
    2012-03-31 3:7月28日
  • 最佳答案

    如果您的 View Controller 是从 Storyboard 中加载的,那么关于笔尖的任何事情都将是一个坏主意。 :-)

    处理 Storyboard 过渡的神奇方法是prepareForSeque:。看一看; segue引用了所涉及的 Controller ,并且sender参数将您链接到发起该操作的控件。

    编辑:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        EventViewController *next = (EventViewController *)[segue destinationViewController];
        next.headerLabel.text = @"Hello!";
    }
    

    在实际代码中,您将需要使用发送方,通过向表询问发送方的索引路径或类似的内容来找出要传递的实际信息。

    10-08 06:13