UITableviewcontroller 与 UIViewController 与 didSelectRowAtIndexPath 的 tableView 方法
Posted
技术标签:
【中文标题】UITableviewcontroller 与 UIViewController 与 didSelectRowAtIndexPath 的 tableView 方法【英文标题】:UITableviewcontroller vs UIViewController with tableView method for didSelectRowAtIndexPath 【发布时间】:2014-12-12 13:50:08 【问题描述】:我在做某事时遇到了麻烦:
我有一个 UIViewController,其中有一个 tableView,它已连接并设置了代表。我试图从 didSelectRowatIndexPath 发送一个 segue,在 prepareforSegue 中我试图读取一些选定单元格的数据(我正在使用模型来检索实际的重要数据,但我有一些元素,即我想要的 imageView从单元格中读取)
让我感到困惑的是,无论我如何设置发件人(self.tableView 或 self 或 indexPath 或任何东西),在 prepareforSegue 中我总是将单元格设置为 nil。
如果我将 UIViewController 更改为 UITableViewController 并将发送方设置为 tableView,则一切正常。
我错过了什么?
代码如下:
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self performSegueWithIdentifier:@"bundleItemDetails" sender:tableView];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"bundleItemDetails"])
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
itemCell *cell = (itemCell*)[self.tableView cellForRowAtIndexPath:selectedIndexPath];
NSDictionary *currentProduct = [[[productsArray objectAtIndex:selectedIndexPath.section] objectForKey:@"products"] objectAtIndex:selectedIndexPath.row];
UINavigationController *navController = [segue destinationViewController];
itemDetails *bundleProducts = (itemDetails*)([navController viewControllers][0]);
UIImage *img = cell.itemImage.image;
bundleProducts.valueImage = img;
bundleProducts.valueName = [currentProduct valueForKey:@"title"];
bundleProducts.valueDescription = [currentProduct valueForKey:@"description"];
bundleProducts.detailFullPrice.text = [currentProduct valueForKey:@"price"];
这与 UITableViewController 完美配合,并为 UIViewController 的单元格值返回 nil
更新:一些新发现
看起来 indexPathForSelectedRow 返回 null 和 0。如果我将 didSelectRowAtIndexPath 的代码更改为:
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[self.tableView selectRowAtIndexPath:indexPath
animated:NO
scrollPosition:UITableViewScrollPositionNone];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:YES];
[self performSegueWithIdentifier:@"bundleItemDetails" sender:self.tableView];
我得到了索引值,但我仍然有空 itemCell(itemCell 是一个带有外部 .xib 的自定义单元格,在 UIViewController 中的调用方式是否与在 UITableviewController 中不同?
【问题讨论】:
发送自我 [self performSegueWithIdentifier:@"bundleItemDetails" sender:self]; 已经试过了,结果一样,单元格为nil 所以添加 self.tableview.datasource=self 和 self.tableview.delegate=self ? 是的,两者都设置为self 告诉我你使用 NSMutableArray 来填充你的 tableView 吗? 【参考方案1】:您可以尝试使用属性来保存要在 segue 中传递的值。您可以在didSelectRowAtIndexPath:
中设置属性,然后在prepareForSegue:sender:
中访问它们。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
self.valueImage = cell.itemImage.image;
// etc...
[self performSegueWithIdentifier:@"bundleItemDetails" sender:self];
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"bundleItemDetails"])
UINavigationController *navController = [segue destinationViewController];
itemDetails *bundleProducts = (itemDetails*)([navController viewControllers][0]);
bundleProducts.valueImage = self.valueImage;
bundleProducts.valueName = self.valueName;
bundleProducts.valueDescription = self.valueDescription;
bundleProducts.detailFullPrice.text = self.detailFullPrice;
【讨论】:
这似乎可以解决我的问题,但我仍然不明白为什么它在 UITableViewController 中不需要它【参考方案2】:检查您的tableView tableView.allowsSelection
是否为YES
【讨论】:
我检查了它,我也尝试将其显式设置为是,没有变化以上是关于UITableviewcontroller 与 UIViewController 与 didSelectRowAtIndexPath 的 tableView 方法的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewController 中的 View 属性和 TableView 属性有啥区别?
UITableViewController 在关闭第二个 ViewController 后返回到第一个单元格
我想通过在 Swift 中以编程方式将 UINavigationController 与 UITableViewController 嵌入 UITableViewController 这是 UITab
UITableviewcontroller 与 UIViewController 与 didSelectRowAtIndexPath 的 tableView 方法
Swift - UIViewController 与 UITableViewController 中的覆盖函数
尝试在 iOS 中将 UITabBarController 与 UITableViewController 一起使用时出现异常