【发布时间】:2013-03-13 17:18:07
【问题描述】:
我创建了一个通用的主从应用程序。我在自定义类(MasterViewController 类)中有一个表格视图。这是一个 UITableViewController 类。 使用 Storyboard,我在我的 iPhone 表格视图中创建了一个自定义单元格。自定义单元格包含 3 个标签和 1 个图像。 在 StoryBoard 中,此表视图数据源和委托设置为 MasterViewController 类。 我的自定义表格视图单元格在属性检查器的“视图”部分中具有“已启用用户交互”。 在我的 MasterViewController 类中,诸如“numberOfSectionsInTableView”之类的 UITableViewDataSource 方法运行良好。 我在表格视图和详细视图之间定义了一个序列。 当我运行应用程序并在表格视图中选择一个单元格时,不会为 iPhone 调用 didSelectRowAtIndexPath。我的 prepareForSegue 方法执行并发生了 segue。
我已经阅读了很多关于 didSelectRowAtIndexPath 未执行的帖子,但我无法解决我的问题。
任何提示将不胜感激。
我的自定义单元格标识符是 ConversationCell。 segue 标识符是 ShowConversationDetails。 我在 numberOfRowsInSection 的第一行使用断点进行调试,并且从未输入过此方法。
segue 有效,详细视图显示带有“Hello”文本的标签。
一些代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
//NSLog(@"Rows %lu",(unsigned long)[sectionInfo numberOfObjects]);
return [sectionInfo numberOfObjects];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ConversationCell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
[[self.fetchedResultsController sections] count]);
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
self.detailViewController.detailItem = object;
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"ShowConversationDetails"]) {
NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow];
Event *e = nil;
e = [self.fetchedResultsController objectAtIndexPath:selectedIndex];
UIViewController *destinationViewController = [segue destinationViewController];
[segue.destinationViewController setLabel:@"Hello"];
}
}
主视图控制器: 这是我上面的界面;
@interface MasterViewController : UITableViewController <NSFetchedResultsControllerDelegate,ASIHTTPRequestDelegate,UITableViewDelegate, UITableViewDataSource>
{
NSMutableArray *eventsArray;
}
这可能是我的问题的线索。当我将以下代码添加到 prepareForSeque
NSIndexPath *selectedIndex = [self.tableView indexPathForSelectedRow];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:selectedIndex];
NSString *messageTableID = [[object valueForKey:@"messagetableid"] description];
selectedIndex 为空,就好像在执行 prepareForSeque 时不再选择行一样。
顺便说一句,为了安全起见,我从模拟器中删除了应用程序,然后对项目进行了清理,但没有任何改变。
提姆
【问题讨论】:
-
好吧好吧好吧,我怀疑你的单元格 - 'ConversationCell' 有一个位于顶部的视图,并且不会让触摸通过它传递到表格视图单元格。如果您正在进入 cellforRow、HeightForRowAtIndex 等方法,并且您说您在使用 DidSelectRowAtIndexPath 时遇到问题,那么它必须是由于最顶层的视图,它不会让触摸传递到单元格。您所能做的就是,只需将“SetUserInterActionEnabled:NO”设置为您在表格视图单元格上拥有的视图,然后通过点击行对其进行测试。不要关闭单元的交互。干杯。 :)
-
雷诺,感谢您的提示。我没有提到我为自定义单元格的每个元素取消选择“启用用户交互”。自定义单元格的交互保持开启。不幸的是,所有这些都完成后,没有调用 DidSelectRowAtIndexPath。
-
Remove all views or setHidden:TRUE for all views on your xib file of Cell,然后尝试构建,看看你是否能设法获得触摸?
标签: ios objective-c xcode