dhr*_*hrm 5 cocoa-touch objective-c uitableview ios
我已经创建了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;
}
}
Run Code Online (Sandbox Code Playgroud)
在我创建了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;
}
Run Code Online (Sandbox Code Playgroud)
然后,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];
}
Run Code Online (Sandbox Code Playgroud)
但是当我选择一行时,我的NewsViewController没有显示 - 而是我看到一个黑色背景的空白视图.我怎么处理这个?是否仍然可以使用seques?
我认为问题是您正在使用alloc-init实例化NewsViewController. 这不会NewsViewController从故事板创建你的。您必须使用[UIStoryboard instantiateViewControllerWithIdentifier:(NSString *)identifier]故事板来实例化。
不过,我认为更简单的方法是打电话
[self performSegueWithIdentifier:@"showNews" sender:indexPath]
Run Code Online (Sandbox Code Playgroud)
在你的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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |