自定义委托回调

时间:2014-01-26 22:08:25

标签: ios iphone objective-c delegates

我是iOS编程的新手,我遇到了问题 我遇到了自定义委托的问题。 我正在尝试做一个简单的自定义,它将数据返回到前一个视图控制器并弹出当前视图控制器。

我有2个导航视图控制器

1 - 主视图控制器 2 - 添加

这是在添加视图控制器中编写的协议

@protocol AddingDelegate <NSObject>

@required
-(void)setInformation:(Adding *)controller withObject:(Conference *)info;

这是我在添加视图控制器时调用它的地方

-(IBAction)addingConference
{
    NSLog(@"Adding Button Pressed");
    conferenceObject = [[Conference alloc]init];
    conferenceObject.name = [NameTX text];
    conferenceObject.city = [CityTX text];
    conferenceObject.description = [Dectription text];
    NSMutableArray *info = [[NSMutableArray alloc] init];
    [info addObject:conferenceObject];
    [self.delegate setInformation:self withObject:conferenceObject];
    NSLog(@"adding Conference method is done");
}

我在主视图控制器的接口上编写了委托

@interface MainViewController : UITableViewController <AddingDelegate>

@end

这里我宣布了委托方法

-(void)setInformation:(Adding *)controller withArray:(NSMutableArray *)info
{
    NSLog(@"in the main view at the delegate");
    [self.navigationController popToRootViewControllerAnimated:YES];
    NSLog(@"Should be popped right now");
}

这是对segue方法的准备

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"AddObject"]) {
        UINavigationController *navigation = segue.destinationViewController;
        Adding *addingViewController = [[navigation viewControllers]objectAtIndex:0];
        addingViewController.delegate = self;
    }
}

现在的问题是当我在堆栈顶部推送添加然后填写信息并按完成时,添加视图控制器不会弹出以显示主视图控制器。

我尝试记录所有内容,并且主视图控制器中的日志未显示。

请帮帮我

2 个答案:

答案 0 :(得分:1)

我在这里注意到,在prepareForSegue:sender:的实现中,segue的destinationViewController是一个导航控制器。这让我觉得你的segue没有推动当前导航堆栈上的AddingController,而是提出了一个新的导航堆栈。这意味着包含AddingController的新导航控制器以模态方式呈现,因此,当您尝试弹出导航堆栈时,似乎没有任何事情发生,因为您在错误的导航堆栈上操作。如果是这种情况,您有两种选择:1。更改[self.navigationController popToRootViewControllerAnimated:YES];的{​​{1}}或2.将segue更改为push segue而不是模态segue,并将segue直接指向{{1 }}

答案 1 :(得分:1)

在Adding.m中

  @class Adding;

@protocol AddingDelegate
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end

@interface Adding : UIViewController

 @property (weak, nonatomic) id <AddingDelegate> delegate; // have you forgot this one


 @end

并使用

 [self dismissViewControllerAnimated:YES completion:nil];

如果您想要返回上一个屏幕并确保添加了导航控制器,则需要关闭 Your storyboard should look like this