首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对长压力机进行模态分析

如何对长压力机进行模态分析
EN

Stack Overflow用户
提问于 2014-08-28 06:20:39
回答 2查看 1.6K关注 0票数 0

我有一个桌面视图,我希望当我触摸要导航到editViewController的单元格时,当我长时间触摸(触摸和等待)要导航到DetailsViewController的单元格时。我得到了这个问题的答案,here

现在我有了另一个问题,我使用下面的代码将选定的行传递给detailViewContoler

代码语言:javascript
复制
- (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“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-28 06:52:23

在表视图的视图控制器和ContactDetailsViewController之间创建一个情节提要,并在“属性”检查器中命名它(假设您将其命名为“ContactDetailsModalSegue”)。

然后,在手势识别器处理程序方法中,您可以像下面这样调用segue:

代码语言:javascript
复制
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { 

    [self performSegueWithIdentifier:@"ContactDetailsModalSegue"
                              sender:self];

}

在这种情况下,self应该是表视图所驻留的视图控制器。如果您正在处理表视图单元格类中的长按压,则应该保持对表视图的视图控制器的弱引用,并相应地重构:

在表视图单元格的.h文件中包含指向父vc的指针:

@property (weak, nonatomic) UIViewController *vc;

在表视图委托中设置单元格时,一定要传递对单元格的引用:

代码语言:javascript
复制
- (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:

代码语言:javascript
复制
-(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方法。这使您能够检索刚才添加到自定义表视图单元格中的公共属性,如下所示:

代码语言:javascript
复制
- (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;
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-08-28 06:29:54

在方法中将[self.navigationController pushViewController:detailView animated:YES];替换为[self.navigationController presentModalViewController:detailView animated:YES completion:nil];

代码语言:javascript
复制
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{ 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25542007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档