我有一个桌面视图,我希望当我触摸要导航到editViewController的单元格时,当我长时间触摸(触摸和等待)要导航到DetailsViewController的单元格时。我得到了这个问题的答案,here。
现在我有了另一个问题,我使用下面的代码将选定的行传递给detailViewContoler
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if([[segue identifier] isEqualToString:@"ContectDetails"])
{
//get selected contact
NSManagedObject *selectedContact=[contacts objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
//pass selected contact to MyContactAppViewController for editing
ContactDetailsViewController *destViewcontroller=segue.destinationViewController;
destViewcontroller.contact=selectedContact;
//contact is my core data object
}
}现在,我需要在long press方法中创建一个模态segue并将segue标识符设置为"ContectDetails“。
发布于 2014-08-28 06:52:23
在表视图的视图控制器和ContactDetailsViewController之间创建一个情节提要,并在“属性”检查器中命名它(假设您将其命名为“ContactDetailsModalSegue”)。
然后,在手势识别器处理程序方法中,您可以像下面这样调用segue:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {
[self performSegueWithIdentifier:@"ContactDetailsModalSegue"
sender:self];
}在这种情况下,self应该是表视图所驻留的视图控制器。如果您正在处理表视图单元格类中的长按压,则应该保持对表视图的视图控制器的弱引用,并相应地重构:
在表视图单元格的.h文件中包含指向父vc的指针:
@property (weak, nonatomic) UIViewController *vc;
在表视图委托中设置单元格时,一定要传递对单元格的引用:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
cell.vc = self; //Assuming your datasource is in the view controller file (adjust if necessary)
}最后,在tableview单元格的.m文件中,使用指向vc的指针调用segue:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {
[self.vc performSegueWithIdentifier:@"ContactDetailsModalSegue"
sender:self];
}Update:为了将用于填充表视图单元格的数据的引用传递给destinationViewController,可以执行以下操作:
首先,确保数据存储在自定义表视图单元格子类.h文件中的模型对象中。在本例中,我使用的是NSManagedObject,因为这就是您的问题所在,但是其他阅读该问题的人可以将其与任何模型对象(例如,NSObject子类)交换出来:
@property (strong, nonatomic) NSManagedObject *managedObject;
注意,在performSegueWithIdentifier:方法调用中,您要将对self的引用作为发送方参数传递。您为发送方参数指定的对象将作为参数传递给- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法。这使您能够检索刚才添加到自定义表视图单元格中的公共属性,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//Verify segue identifier
if([[segue identifier] isEqualToString:@"ContactDetailsModalSegue"])
{
//Protect yourself from unrecognized selector errors in case you reuse this segue
if ([sender isKindOfClass:[YourCustomTableCellClass class]] &&
[segue.destinationViewController respondsToSelector:@selector(setContact:)]) {
//get selected contact
NSManagedObject *selectedContact= (YourCustomTableCellClass *)sender.managedObject;
//pass selected contact to ContactDetailsViewController for editing
ContactDetailsViewController *destViewController= segue.destinationViewController;
destViewController.contact = selectedContact;
}
}
}发布于 2014-08-28 06:29:54
在方法中将[self.navigationController pushViewController:detailView animated:YES];替换为[self.navigationController presentModalViewController:detailView animated:YES completion:nil];
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
}https://stackoverflow.com/questions/25542007
复制相似问题