0

我正在开发一个联系人应用程序。我想通过打开这样的新视图来添加联系人:

RootViewController.m... 它有一个 NSMutableArray 称为联系人

- (IBAction)addContact:(id)sender {

    AddContViewController *cont = [[AddContViewController alloc]init];
    [self.navigationController presentViewController:cont animated:YES completion:nil];

}

然后回来将联系人添加到根视图控制器的数组中:

添加ContViewController.m

- (IBAction)acceptAction:(id)sender {


    if ([[firstName text] length] < 1 && [[lastName text] length] < 1)
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Oh no!" message:@"Invalid contact information!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    }
    else{

// 创建联系人并将其放入根视图控制器的数组中

   Contact *cont = [[Contact alloc]initWithFirstName:[firstName text] lastName:[lastName text] andDOB:[dobPicker date]];

// 现在我不知道该怎么办....

    [self dismissViewControllerAnimated:YES completion:^{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Success!" message:@"Contact added successfully!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
        }];
    }
}
4

3 回答 3

3

您应该使用委托将新的 Contact 对象回您的 RootViewController。

定义协议

@protocol AddContDelegate
   -(void)didAddnewContact:(Contact *)contact;
@end

在您的 AddContViewController 上有一个委托属性:

@property (nonatomic, assign) id<AddContDelegate> delegate;

在您的 addContact: 方法中分配委托:

- (IBAction)addContact:(id)sender {

    AddContViewController *cont = [[AddContViewController alloc]init];
    cont.delegate = self;
    [self.navigationController presentViewController:cont animated:YES completion:nil];

}

在 RootViewController 中实现委托方法:

-(void)didAddnewContact:(Contact *)contact {
   [contacts addObject:contact];
}

从 AddContViewController 调用委托:

- (IBAction)acceptAction:(id)sender {


    if ([[firstName text] length] < 1 && [[lastName text] length] < 1)
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Oh no!" message:@"Invalid contact information!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    }
    else{

   Contact *cont = [[Contact alloc]initWithFirstName:[firstName text] lastName:[lastName text] andDOB:[dobPicker date]];

    if([self.delegate respondsToSelector:@selector(didAddnewContact:)]) {
        [self.delegate didAddnewContact:cont];
    }

    [self dismissViewControllerAnimated:YES completion:^{
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Success!" message:@"Contact added successfully!" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
        }];
    }
}
于 2012-10-16T11:31:49.637 回答
1

有几种方法可以传回数据。我建议设置一个委托方法。在任何导入后将其添加到 AddContViewController.h 的顶部:

@class addContViewController
@protocol addContViewControllerDelegate <NSObject>
-(void)addContViewController:(addContViewController *)controller didAddContact:(Contact *)contact;
@end

在接口部分之后添加

@property (nonatomic, weak) id <addContViewControllerDelegate> delegate;

然后在您的 RootViewController.h 中将协议添加到接口行<addContViewControllerDelegate>
现在在您的RootViewController.m方法中addContact,在您推送新视图之前,添加:

cont.delegate = self;

现在在您AddContViewController.m而不是关闭视图中,调用:

[self.delegate addContViewController:self didAddContact:cont];

这将在您的 RootViewController 中调用一个新方法,它将传递联系人,在这里您可以根据需要对其进行操作,但首先关闭视图:

-(void)addContViewController:(addContViewController *)controller didAddContact:(Contact *)contact {
self dismissViewControllerAnimated:YES;

}
于 2012-10-16T11:44:26.413 回答
0

您可能希望为此操作使用委托,以便您可以与 rootviewcontroller 通信以获取联系人对象。

使用navigationViewController 的堆栈可以实现相同[navigationViewController viewControllers]的目的,并且最后一个对象的类型是您的类的类型,您可以执行根的某些选择器并AddContViewController通过成功消息关闭您的选择器。

希望这会有所帮助!

于 2012-10-16T11:46:07.017 回答