簡體   English   中英

解雇控制器后未調用代表

[英]Delegate not called after dismissing controller

我有一個控制器A,並且有一個UIButton,單擊時會顯示一個新的控制器B。但是問題是控制器B首先嵌入了NAV。 所以最終我將介紹UINavigationController。

現在,控制器B中有一個UIButton,控制器將在該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");
}

在這種情況下,我知道在介紹NAV控制器而不是Controller B時,我沒有提供proxy.self部分。

因此,我在viewDidLoad和Controller * B中創建了一個對象,並將委托設置為self。 但這是行不通的,永遠不會調用委托

另一方面,如果我僅在沒有導航的情況下展示Cntroller B,並且在展示前我保留b.delegate = self,它就可以工作。

另一個替代方案可以是觸發通知。 但是我想和代表們一起工作。

因此,有什么方法可以調用由Nav嵌入的所呈現視圖控制器的委托。 任何幫助將不勝感激。

好吧,我得到了答案,我們必須從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];

而且有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM