使用模态视图控制器设置协议 - >视图控制器

时间:2013-10-22 18:40:48

标签: ios objective-c uiviewcontroller protocols

我有一个初始ViewController,我们称之为HomeViewController,它有一个调用模态视图控制器的按钮,我们称之为ModalViewController。在ModalViewController里面,我有一个包含两个部分的表视图。如果您单击第0部分中的任何单元格,它会将信息发送回HomeViewController(此部分我使用的是协议)。如果单击第1部分中的任何单元格,它会将选项推送到另一个视图控制器,我们可以将其命名为OptionsViewController。这是我变得棘手的地方。如果您点击其中任何一个选项,请关闭OptionsViewController并关闭ModalViewcontroller并将该信息发送至HomeViewController,就像ModalViewControllerHomeViewController一样。我试图建立一个与ModalViewController类似的协议,但它永远不会被调用。

OptionsViewController协议& .h文件

@protocol OptionsViewControllerDelegate <NSObject>
@optional
-(void) optionsInfo:(NSArray *)optionsViewArray;

@end

@interface OptionsViewController : UITableViewController
@property (retain) id delegate;
@property (nonatomic, strong) NSArray *sendArray;
@end

OptionsViewController.m,调用它来弹出堆栈。

{
    [self dismissOptionsView];
}
-(void) viewWillDisappear:(BOOL)animated
{
    NSLog(@"Send Array: %@", self.sendArray);
    [[self delegate] optionsInfo:sendArray];
}
-(void)dismissOptionsView
{
    [self.navigationController popViewControllerAnimated:YES];
}

在ModalViewController.h内部

@protocol ModalViewControllerDelegate <NSObject>
@optional
-(void) sendInformation:(NSArray *)infoArray;
@end

@interface ModalViewController : UITableViewController <ConditionsViewControllerDelegate, UISearchBarDelegate>
{
    UISearchBar *searchDrugBar;
}
@property (retain) id delegate;
@property (nonatomic, strong) IBOutlet UISearchBar *searchDrugBar;
@property (nonatomic, strong) NSArray *infoArray;
@end

ModInViewController.m,其中应该包含OptionsInfo。

-(void) optionsInfo:(NSArray *)optionsViewArray
{
    //IT NEVER REACHES HERE :(
    NSLog(@"HERE");
    self.infoArray = optionsViewArray;
    NSLog(@"Finished");
    [self dismissViewControllerAnimated:YES completion:nil];
}

有没有人做过类似的事情或知道解决方法?任何有关正确方向的信息,链接,指导等都将受到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您需要在下面的OptionsViewController中设置委托: -

在您的OptionsViewController.m包含方法

下面的行中
 [self setDelegate:ModalViewController];