通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell
Posted
技术标签:
【中文标题】通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell【英文标题】:Creating UITableViewCell through button press in another ViewController/ referencing UITableView in another ViewController 【发布时间】: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];
todayEvents、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 【参考方案1】:从您的FirstViewController
,您可以通过其tabBarController
属性获取对标签栏控制器的引用。 UITabBarController
有一个 viewControllers
属性,它是每个选项卡中的视图控制器的数组。因此,如果您的 SecondViewController
在第二个选项卡(索引 1)中,您可以通过以下方式从 FirstViewController
访问它:
let secondVC = self.tabBarController!.viewControllers[1] as! SecondViewController
【讨论】:
感谢您的回答!我实际上让它工作,但我必须创建一个新的实例方法来调用 reloadData 方法,因为 self.tabBarController.viewControllers[1] 不识别 reloadData 方法。一旦我有足够的声望点就会投票。非常感谢以上是关于通过在另一个 ViewController 中按下按钮/在另一个 ViewController 中引用 UITableView 创建 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
在swift5中按下特定按钮时如何使用代码呈现tabBarViewController(在情节提要中创建)?
在 UICollectionViewController 中按下 UICollectionView 后没有响应