解雇控制员后没有打电话给代表

时间:2015-06-30 12:40:47

标签: ios objective-c uinavigationcontroller delegates presentviewcontroller

我有一个控制器A并且有一个UIButton,点击后我会呈现一个新的控制器B.但问题是控制器B首先嵌入了一个NAV。所以最终我展示了UINavigationController。

现在控制器B中有一个UIButton,控制器将在该控制器上解除,并且应该在控制器A上传递一个委托,并带有一些消息

控制器A UIButtonCode

- (IBAction)summaryButtonClick:(id)sender {

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"];

[self presentViewController:summaryVC animated:YES completion:nil];
summaryVC=nil;

}

现在控制器B.     .h文件

 #import <UIKit/UIKit.h>
@protocol SummaryViewWhatsNewDelegate <NSObject>
@required
- (void) SummaryViewWhatsNew:(NSString*)title;
@end
@interface SummaryViewController :         
UIViewController<UITableViewDataSource,UITableViewDelegate>
{
id <SummaryViewWhatsNewDelegate> _delegate;
}
@property (nonatomic,strong) id delegate;

@property (weak, nonatomic) IBOutlet UITableView *summaryTableView;
- (IBAction)closeSummaryView:(id)sender;

@end

的.m

//Button Click 
 [self dismissViewControllerAnimated:YES completion:^{
 [_delegate SummaryViewWhatsNew:@"Sales Triggers Filter"];
}];

我已经在Controller A中实现了委托 .H

@interface ControllerA : UIViewController<SummaryViewWhatsNewDelegate>
控制器A的

.m

#pragma mark -ControllerB Delegate
-(void)SummaryViewWhatsNew:(NSString *)title{
    NSLog(@"Delegate Called");
}

在这种情况下,我知道我没有提供 delegate.self 部分,因为我正在展示NAV控制器而不是控制器B

所以我在viewDidLoad和Controller * B中创建了一个Object,并将委托设置为self。但它不起作用,委托永远不会被称为

另一方面,如果我只在没有导航的情况下展示Cntroller B并且在呈现之前我保留了b.delegate = self,它就可以工作。

另一个替代方案可以触发通知。但我想与代表们合作。

那么有没有办法调用所呈现的视图控制器的委托,该控制器由Nav 嵌入。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我得到了答案 我们必须从NAV

获取Controller对象

我在演示的时候,我只需要添加这些线条就可以了。

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"];

//Add These lines in order to get the object of Controller B.
// SummaryViewController is my Controller B

SummaryViewController* summary=[[summaryVC viewControllers] objectAtIndex:0];
summary.delegate=self;
[self presentViewController:summaryVC animated:YES completion:nil];

它有效。