xcode/ios:以编程方式推送视图控制器并传递行信息

Posted

技术标签:

【中文标题】xcode/ios:以编程方式推送视图控制器并传递行信息【英文标题】:xcode/ios: push view controller programatically and pass row info 【发布时间】:2015-04-05 02:12:57 【问题描述】:

我有一张桌子。当您单击表格行时,您会使用为 segue 准备的详细信息。在详细信息页面中,我有一个编辑按钮,可让您以模态方式打开先前在情节提要中创建的视图控制器。

问题是如何传递详细信息项的行或以其他方式向编辑控制器提供要显示的项的信息?

这是启动视图控制器的代码。

//create Edit navigation button:

 UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Edit"
                                   style:UIBarButtonItemStylePlain
                                   target:self
                                   action:
                                   //next line calls method editView
                                   @selector(editView:)];
    self.navigationItem.rightBarButtonItem = editButton;

//method that fires when you click button to launch edit view controller


- (void) editView:(id) sender

    NSLog(@"pressed");
    UIStoryboard *storyBoard = self.storyboard;
    NSString * storyboardName = [storyBoard valueForKey:@"name"];
    UIViewController *vc = [[UIStoryboard storyboardWithName:storyboardName bundle:nil] instantiateViewControllerWithIdentifier:@"editvc"];
    IDEditVC *secondViewController =
    [storyBoard instantiateViewControllerWithIdentifier:@"editvc"];

但是我怎样才能将项目的信息传递给编辑呢?

感谢您的任何建议。

【问题讨论】:

“以前在情节提要中以模态方式创建”是什么意思?您正在 editView 方法中创建控制器。您在那里有一个指向它的指针(secondViewController),因此您可以在该方法中传递您需要的任何信息。完全不清楚为什么要在 editView 中实例化 2 个控制器 vc 和 secondViewController,而且你对它们中的任何一个都不做任何事情。 您可以轻松地将数据传递给视图控制器。如何将数据作为数组或字符串由您决定。您在编辑视图控制器中定义变量并从详细信息页面传递数据。 【参考方案1】:

让我们假设在UITableViewController 中,您正在为 TableView 构建一个包含对象的数组(例如:MyObject.m/h)。您应该使用didSelectRowAtIndexPath 检测用户选择了哪个单元格,然后使用该整数从您的数组中检索 MyObject 以准备 segue。 例如:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

        cellPressed =(int)indexPath.row; //cellPressed is an integer variable(global variable in my VC

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


现在在 prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

if([[segue identifier] isEqualToString:@"toMyVc"])

    MyVC *mVC = [segue destinationViewController];
    mVC.myObject = [myArrayWithMyObjects objectAtIndex:cellPressed];

 

在您的编辑视图中:

IDEditVC *secondViewController =
[storyBoard instantiateViewControllerWithIdentifier:@"editvc"];
secondViewController.myObj = myObjectRetrievedFromArray;

注意:您应该在 .h 文件中声明一个变量 MyObject 以便在其他类中可见。

在类中声明一个“全局”变量:

@interface ViewController : UIViewController

  int cellPressed; //This is accessible by any method in YourViewController.m

【讨论】:

使用 Core Data 是否也一样。在 prepareforsegue 我目前只有 Items *item = [self.fetchedResultsController objectAtIndexPath:indexPath];然后 destViewController.item=item 实现我不知道如何创建一个全局变量。你用外部吗? 您是为全局变量创建一个新的单独类,还是将其放在某个类中,该类导入到我正在使用的视图控制器中,例如保存核心数据的数据模型? 在我们的例子中,类的全局变量意味着它是一个可以被实例类的任何方法访问的变量。不是任何类都可以访问的全局变量。我声明它就像我在班级的 .h 中的示例中展示的那样 好的,我能够使用与您的问题类似的以下问题的答案...***.com/questions/9016680/…。标记你的正确原因它帮助了我,尽管我根据链接做了一些不同的方式。谢谢。

以上是关于xcode/ios:以编程方式推送视图控制器并传递行信息的主要内容,如果未能解决你的问题,请参考以下文章

无法在 IOS8 中使用 showSegue 以编程方式“推送”视图控制器

如何以编程方式在导航控制器上推送下一个视图控制器?

推送新的视图控制器(以编程方式)不起作用?为啥?

带有选项卡视图控制器的 Xcode IOS 转换视图

以编程方式从 UiView 推送新视图控制器的问题

使用自定义初始化程序 swift 以编程方式实例化和推送视图控制器