对不起,如果这个问题太简单了,你们所有人都无法回答,但这已经困扰了我几个星期。
所以我的FirstViewController中有一个按钮
- (IBAction)levelOneButtonPress:(id)sender {
SecondViewController *second = [[SecondViewController alloc] init];
if(![self.eventField.text isEqualToString:@""])
{
events *createdEvent = [[events alloc] init];
createdEvent.eventDetails = self.eventField.text;
createdEvent.dateDetails = self.dateField.text;
createdEvent.timeDetails = self.timeField.text;
[createdEvent combineDateWithTime];
[createdEvent dateFormat];
createdEvent.gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
if ([createdEvent.gregorian isDateInToday:createdEvent.eventDate] == YES) {
NSLog(@"Date is in today");
[todayEvents addObject:createdEvent];
}
else if ([createdEvent.gregorian isDateInTomorrow:createdEvent.eventDate] == YES)
{
[tomorrowEvents addObject:createdEvent];
}
else
{
[futureEvents addObject:createdEvent];
}
}
}
todayEvents,tomorrowEvents和futureEvents是我将事件分类的所有数组。
我希望我的用户将详细信息输入到文本框中,然后我将对其进行整理,进行日期格式化,然后添加到数组中。
之后,我希望事件在UITableView上显示为UITableViewCell,所以我决定在我的SecondViewController(带有UITableView的viewcontroller)中写这个事件。
NSMutableArray *todayEvents;
NSMutableArray *tomorrowEvents;
NSMutableArray *futureEvents;
@synthesize eventTable;
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section) {
case 0:
return [todayEvents count];
case 1:
return [tomorrowEvents count];
case 2:
return [futureEvents count];
default:
return 0;
}
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0:
return @"Events Today";
case 1:
return @"Events Tomorrow";
case 2:
return @"Events In The Future";
default:
return @"Unknown";
}
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"defaultCell"];
switch (indexPath.section) {
case 0:
cell.textLabel.text = [NSString stringWithFormat:@"%@",[todayEvents objectAtIndex:indexPath.row]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[todayEvents objectAtIndex:indexPath.row]];
break;
case 1:
cell.textLabel.text = [NSString stringWithFormat:@"%@",[tomorrowEvents objectAtIndex:indexPath.row]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[tomorrowEvents objectAtIndex:indexPath.row]];
break;
case 2:
cell.textLabel.text = [NSString stringWithFormat:@"%@",[futureEvents objectAtIndex:indexPath.row]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[futureEvents objectAtIndex:indexPath.row]];
break;
default:
break;
}
return cell;
}
}
然而,当我运行我的应用程序时,UITableView甚至在我按下按钮时都没有生成行。
目前我猜这是因为我必须重新加载UITableView但我似乎无法在我的FirstViewController中引用它来向其发送重新加载的消息。
我是否在FirstViewController.m文件中创建了一个SecondViewController实例,然后在该实例上调用reloadData方法?它会导致UITableView重新加载吗?我对此部分有点困惑,因为我不确定编译器运行项目时后台会发生什么。是否在运行时初始化所有ViewControllers的实例?如果是这种情况,初始化ViewController的另一个实例可能没有帮助。
还请告诉我,除了我现在使用的方法之外,是否有更简单的方法来实现我打算使用我的应用程序。
答案 0 :(得分:0)
从FirstViewController
,您可以通过其tabBarController
属性获得对标签栏控制器的引用。 UITabBarController
具有viewControllers
属性,该属性是每个选项卡中视图控制器的数组。因此,如果您的SecondViewController
位于第二个标签(索引1)中,则可以从FirstViewController
访问它:
let secondVC = self.tabBarController!.viewControllers[1] as! SecondViewController