2012-03-31 43 views
3

所以我遇到这个问题已经让我发疯了好几个小时,而且我感觉很蠢,因为它看起来很简单。我一直在寻找网络和乱搞过去3个小时的代码,我仍然无法弄清楚:(发送从UITableViewController到UIViewController的NSString对象(使用情节串连图板)问题

在我开始之前,我使用Xcode 4.3.1并在iOS 5.1( 。两个模拟器和物理设备)

所以这是我迄今所做的:

  • 用故事板到我所有的意见
  • 自己的看法
  • 一个是一个UITableViewController连接,并将其链接到一个UIViewController(使用'push',并且它在2个视图之间来回切换)
  • 的子类的UITableViewController被称为ScheduleViewController
  • 的UIViewController子类被称为EventViewController
  • 我已经填充我所有的章节和表格单元格与适当的内容(我使用为textLabel和detailTextLabel(这不是一个问题) - 对于UIViewController中,我只加了标签,并生成一个IBOutlet名为标签:headerLabel

这就是我试图完成:

  • 当用户在ScheduleViewController中单击一个表格单元格时,转到EventViewController(直到此时它可以工作!)
  • 根据所选表格单元格,将textLabel.text,detailTextLabel.text和Section Header文本传递给EventViewController(类型的作品,所有的值与NSLog出现,但这就是它???)
  • 我觉得最好从小开始,所以我将首先将headerLabel文本(在EventViewController中)设置为Section Header文本(在ScheduleViewController中) - 当我使用NSLog检查值时,这似乎仍然有效,但是当我尝试设置headerLabel的实际文本时,它只显示空字符串:(

这里是我坚持和我所到目前为止已经试过:

  • 那么首先我已经做了完全一样的(除了它是与iOS 4,我并没有用故事板) ,我做的是在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;
  • 首先,我试着给它在didSelectRowAtIndexPath方法:在ScheduleViewController方法,并且它种工作,这里是EventViewController方法:

    //Method to initialize event time, name, and date. 
    
    • (ID)initEventTime:(的NSString *)eventTime和Name:(NSString *)eventName andDate:(NSString *)eventDate { self = [super initWithNibName:@“EventViewController”bundle:nil]; (自己) { NSLog(@“my custom”); //定制初始化

      // 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]; } return self; }

  • 这里是我如何被调用的didSelectRowAtIndexPath方法的方法:(在ScheduleViewController)方法:

    EventViewController * EVC = [[EventViewController的alloc] initEventTime:TIMEVALUE andName:eventValue andDate:DATEVALUE ]。

  • 因此,正如你可以看到上面我首先检查值是否出现在输出窗口使用NSLog,他们都做了!

  • 但是,当我试图设置headerLabel文本仍返回一个空字符串
  • 于是我试图创造EventViewController一个getter和setter(你可以在上面看到),称为getTheEventDate和setTheEventDate。
  • 在这些方法中,我只需使用eventDate参数setTheEventDate,然后获取值;并再次出现在输出窗口,但一个空字符串headerLabel
  • 我也尝试使用NSLog获取eventDate的值,NSLog获取headerLabel的文本值,另一个NSLog以确保eventDate不是空值。
  • 下面是在输出窗口输出:

    2012-03-31我的自定义 2012-03-31 7月28日 2012-03-31 2:7月28日 2012-03-31标签: (空) 2012-03-31 3:7月28日

回答

0

如果您的视图控制器是由一个故事板加载,然后就笔尖什么将是一个坏主意。 :-)

处理故事板转换的神奇方法是prepareForSeque :.看看它; segue引用了所涉及的控制器,并且sender参数将您引向启动该操作的控件。

编辑:

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

在实际的代码,你将需要使用发件人找出什么实际信息,通过询问表发送者的索引路径或那样的事情经过。

+0

雅我试过了,我仍然得到相同的结果。我试着直接使用eventViewController.headerLabel.text = theDate设置headerLabel; (它只是给了我一个空字符串)我也尝试在prepareForSegue中使用自定义init方法,并且我只在输出窗口中得到了结果 – 2012-03-31 13:12:39

+0

因此在我的自定义init方法中取出[super initWithNibName]?我最初只是把它作为一个方法: - (void)initEventTime:(NSString *)eventTime和Name:(NSString *)eventName andDate:(NSString *)eventDate;但这也没有工作 – 2012-03-31 13:15:59

+0

,我也尝试设置segue的标识符,但这也没有工作,我喜欢编程,但我也可以令人沮丧 – 2012-03-31 13:20:18

相关问题