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

时间:2015-04-05 02:12:58

标签: ios objective-c modalviewcontroller

我有一张桌子。当您单击表格行时,您可以使用prepare for 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"];
}

但是如何传递有关项目的信息进行编辑?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

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

- (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];

}

现在准备参赛:

- (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
}