我已经创建了 UITableViewCell 的子类。到目前为止,我只使用了在我的故事板中“设计”的单元格,我可以在其中设置segues。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[super prepareForSegue:segue sender:sender];
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
if ([[segue identifier] isEqualToString:@"showNews"]) {
NewsViewController *newsViewController = [segue destinationViewController];
News *news = (News*)[self.fetchedResultsController objectAtIndexPath:indexPath];
newsViewController.news = news;
}
}
在我创建 UITableViewCell 的子类之后,我不再能够使用Storyboard为自定义单元格创建segues,对吧?我试图在故事板中创建一个单元格并将其类设置为我的自定义类 - 但是当我运行该应用程序时,单元格只是空白。
所以我只是在tableView:cellForRowAtIndexPath
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WSTableViewCell";
WSTableViewCell *cell = (WSTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[WSTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
WSObject *item = [self.fetchedResultsController objectAtIndexPath:indexPath];
[cell.titleLabel setText:item.title];
return cell;
}
然后在tableView:didSelectRowAtIndexPath
我正在尝试创建NewsViewController,设置新闻项并将其推送到navigationController:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
News* news = [self.fetchedResultsController objectAtIndexPath:indexPath];
NewsViewController *newsViewController = [[NewsViewController alloc] init];
newsViewController.news = news;
[[self navigationController] pushViewController:newsViewController animated:YES];
}
但是当我选择一行时,我的NewsViewController没有显示 - 而是我看到一个黑色背景的空白视图。我怎么处理这个?是否仍然可以使用seques?
答案 0 :(得分:3)
我认为问题在于您使用alloc-init
来实例化NewsViewController
。这不会从故事板创建NewsViewController
。您必须使用[UIStoryboard instantiateViewControllerWithIdentifier:(NSString *)identifier]
从故事板中实例化。
但是,我认为更简单的方法是致电
[self performSegueWithIdentifier:@"showNews" sender:indexPath]
在didSelectRowAtIndexPath
中。您必须稍微更改prepareForSegue...
。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSIndexPath *indexPath = (NSIndexPath *)sender;
if ([[segue identifier] isEqualToString:@"showNews"]) {
NewsViewController *newsViewController = [segue destinationViewController];
News *news = (News*)[self.fetchedResultsController objectAtIndexPath:indexPath];
newsViewController.news = news;
}
}