【发布时间】:2012-04-14 21:51:33
【问题描述】:
所以我遇到了这个让我发疯了好几个小时的问题,我觉得很愚蠢,因为它看起来很简单。在过去的 3 个小时里,我一直在网上搜索并弄乱代码,但我仍然无法弄清楚:(
在开始之前,我正在使用 Xcode 4.3.1 并在 iOS 5.1 上进行测试(模拟器和物理设备)。
这就是我到目前为止所做的:
- 使用故事板连接我的所有观点
- 我的一个视图是 UITableViewController,它链接到 UIViewController(使用“推送”,它可以在 2 个视图之间来回正常工作)
- 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 中并且我没有使用情节提要),我所做的是在 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 { self = [super initWithNibName:@"EventViewController" bundle:nil]; 如果(自己) { NSLog(@"我的自定义"); // 自定义初始化
//NSLog(@"%@",eventTime); //NSLog(@"%@",eventName); //NSLog(@"%@",eventDate); NSString *mystr = [NSString stringWithFormat:@"%@",eventDate]; NSLog(@"1: %@",mystr); [自我设置事件日期:事件日期]; 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 中创建一个 getter 和 setter(如上所示),称为 getTheEventDate 和 setTheEventDate。
- 在这些方法中,我只需使用 eventDate 参数设置TheEventDate,然后获取值;并再次出现在输出窗口中,但是 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日
【问题讨论】:
标签: objective-c xcode ios5 storyboard