【问题标题】:Creating UITableViewCell through button press in another ViewController/ referencing UITableView in another ViewController通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell
【发布时间】:2016-03-13 13:27:10
【问题描述】:

很抱歉,如果这个问题对你们所有人来说太简单了,但它已经困扰了我几个星期。

所以我的 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];
    }
}

}

tod​​ayEvents、todayEvents 和 futureEvents 都是我将事件分类到的数组。

我希望我的用户将详细信息输入到文本框中,然后我将对其进行整理,进行一些日期格式化,然后添加到数组中。

之后,我希望事件在 UITableView 上显示为 UITableViewCell,所以我决定将其写在我的 SecondViewController(其中包含 UITableView 的视图控制器)

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 重新加载吗?我对这部分有点困惑,因为我不确定编译器运行项目时后台会发生什么。它是否在运行时初始化所有 ViewController 的实例?如果是这种情况,初始化 ViewController 的另一个实例可能无济于事。

还请告诉我,除了我现在使用的方法之外,是否还有更简单的方法可以实现我打算对我的应用执行的操作。

【问题讨论】:

  • 你能解释一下你的视图控制器层次结构吗?哪个先显示?你如何从一个到另一个?
  • 嗨! @pbasdf 所有视图控制器都连接到选项卡式视图控制器。首先显示带有按钮的视图控制器。我通过使用 xcode 给出的默认 tabbedviewcontroller 切换选项卡进入 secondviewcontroller

标签: ios objective-c uitableview uiviewcontroller uitabbarcontroller


【解决方案1】:

从您的FirstViewController,您可以通过其tabBarController 属性获取对标签栏控制器的引用。 UITabBarController 有一个 viewControllers 属性,它是每个选项卡中的视图控制器的数组。因此,如果您的 SecondViewController 在第二个选项卡(索引 1)中,您可以通过以下方式从 FirstViewController 访问它:

let secondVC = self.tabBarController!.viewControllers[1] as! SecondViewController

【讨论】:

  • 感谢您的回答!我实际上让它工作,但我必须创建一个新的实例方法来调用 reloadData 方法,因为 self.tabBarController.viewControllers[1] 不识别 reloadData 方法。一旦我有足够的声望点就会投票。非常感谢
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多